summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);