Rather than roll our own, use strrchr() instead, which glibc may have a
better implementation than the simple iteration method we were using.

Signed-off-by: Dan McGee <[email protected]>
---
 src/pacman/query.c |    4 ++--
 src/pacman/util.c  |   18 +++++-------------
 src/pacman/util.h  |    2 +-
 3 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/src/pacman/query.c b/src/pacman/query.c
index dea309a..f599360 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -109,8 +109,8 @@ static int query_fileowner(alpm_list_t *targets)
        for(t = targets; t; t = alpm_list_next(t)) {
                int found = 0;
                filename = strdup(alpm_list_getdata(t));
-               char *bname, *dname, *rpath;
-               const char *root;
+               char *dname, *rpath;
+               const char *root, *bname;
                struct stat buf;
                alpm_list_t *i, *j;
 
diff --git a/src/pacman/util.c b/src/pacman/util.c
index d91d1d4..0377bf7 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -157,25 +157,17 @@ int rmrf(const char *path)
 }
 
 /** Parse the basename of a program from a path.
-* Grabbed from the uClibc source.
 * @param path path to parse basename from
 *
 * @return everything following the final '/'
 */
-char *mbasename(const char *path)
+const char *mbasename(const char *path)
 {
-       const char *s;
-       const char *p;
-
-       p = s = path;
-
-       while (*s) {
-               if (*s++ == '/') {
-                       p = s;
-               }
+       const char *last = strrchr(path, '/');
+       if(last) {
+               return(last + 1);
        }
-
-       return (char *)p;
+       return(path);
 }
 
 /** Parse the dirname of a program from a path.
diff --git a/src/pacman/util.h b/src/pacman/util.h
index a5c382d..78fe5b5 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -44,7 +44,7 @@ int trans_release(void);
 int needs_root(void);
 int getcols(void);
 int rmrf(const char *path);
-char *mbasename(const char *path);
+const char *mbasename(const char *path);
 char *mdirname(const char *path);
 void indentprint(const char *str, int indent);
 char *strtoupper(char *str);
-- 
1.7.3.5


Reply via email to