Improve mbasename performance

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>
This commit is contained in:
Dan McGee 2011-01-22 14:20:42 -06:00
parent d16a5ae7dd
commit 4d291508c2
3 changed files with 8 additions and 16 deletions

View File

@ -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;

View File

@ -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.

View File

@ -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);