diff options
author | Dan McGee <dan@archlinux.org> | 2008-02-06 01:49:13 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-02-06 02:18:44 +0100 |
commit | 7d7a33791211b26d69bcf3c23174250dd14e9486 (patch) | |
tree | 080405f892324f09e9ae7f5901a4771df379fd09 | |
parent | a7a9f37561b45d2d2900b4c419ac3b9f0c7f2d75 (diff) | |
download | pacman-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.c | 28 | ||||
-rw-r--r-- | src/pacman/util.h | 1 |
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); |