summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-02-06 01:49:13 +0100
committerDan McGee <dan@archlinux.org>2008-02-06 02:18:44 +0100
commit7d7a33791211b26d69bcf3c23174250dd14e9486 (patch)
tree080405f892324f09e9ae7f5901a4771df379fd09
parenta7a9f37561b45d2d2900b4c419ac3b9f0c7f2d75 (diff)
downloadpacman-7d7a33791211b26d69bcf3c23174250dd14e9486.tar.gz
pacman-7d7a33791211b26d69bcf3c23174250dd14e9486.tar.xz
pacman/util.c: add mdirname function
This function mirrors mbasename and will be used by the 'owns' machinery. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--src/pacman/util.c28
-rw-r--r--src/pacman/util.h1
2 files changed, 29 insertions, 0 deletions
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 678445d3..20f4c072 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -187,6 +187,34 @@ char *mbasename(const char *path)
return (char *)p;
}
+/** Parse the dirname of a program from a path.
+* The path returned should be freed.
+* @param path path to parse dirname from
+*
+* @return everything preceding the final '/'
+*/
+char *mdirname(const char *path)
+{
+ char *ret, *last;
+
+ /* null or empty path */
+ if(path == NULL || path == '\0') {
+ return(strdup("."));
+ }
+
+ ret = strdup(path);
+ last = strrchr(ret, '/');
+
+ if(last != NULL) {
+ /* we found a '/', so terminate our string */
+ *last = '\0';
+ return(ret);
+ }
+ /* no slash found */
+ free(ret);
+ return(strdup("."));
+}
+
/* output a string, but wrap words properly with a specified indentation
*/
void indentprint(const char *str, int indent)
diff --git a/src/pacman/util.h b/src/pacman/util.h
index 00c88949..0273512e 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -41,6 +41,7 @@ int getcols();
int makepath(const char *path);
int rmrf(const char *path);
char *mbasename(const char *path);
+char *mdirname(const char *path);
void indentprint(const char *str, int indent);
char *strtoupper(char *str);
char *strtrim(char *str);