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 <dan@archlinux.org> --- 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