[pacman-dev] [PATCH v2 1/2] libalpm: Introduce _alpm_mbasename and _alpm_mdirname
Pang Yan Han
pangyanhan at gmail.com
Wed Aug 3 04:36:01 EDT 2011
_alpm_mbasename and _alpm_mdirname are the same functions as mbasename and
mdirname in src/pacman/util.c . Borrow them over to libalpm to prepare for
the next patch which teaches pacman to save backup files with .pacsave.n
extension.
Signed-off-by: Pang Yan Han <pangyanhan at gmail.com>
---
lib/libalpm/util.c | 42 ++++++++++++++++++++++++++++++++++++++++++
lib/libalpm/util.h | 2 ++
2 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 123cd24..413e406 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -175,6 +175,48 @@ cleanup:
return ret;
}
+/** Parse the basename of a program from a path.
+* @param path path to parse basename from
+*
+* @return everything following the final '/'
+*/
+const char *_alpm_mbasename(const char *path)
+{
+ const char *last = strrchr(path, '/');
+ if(last) {
+ return last + 1;
+ }
+ return path;
+}
+
+/** 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 *_alpm_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(".");
+}
+
/* Trim whitespace and newlines from a string
*/
char *_alpm_strtrim(char *str)
diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h
index 9ee6370..febfef9 100644
--- a/lib/libalpm/util.h
+++ b/lib/libalpm/util.h
@@ -94,6 +94,8 @@ struct archive_read_buffer {
int _alpm_makepath(const char *path);
int _alpm_makepath_mode(const char *path, mode_t mode);
int _alpm_copyfile(const char *src, const char *dest);
+const char *_alpm_mbasename(const char *path);
+char *_alpm_mdirname(const char *path);
char *_alpm_strtrim(char *str);
size_t _alpm_strip_newline(char *str);
int _alpm_unpack_single(alpm_handle_t *handle, const char *archive,
--
1.7.6
More information about the pacman-dev
mailing list