Redefining basename_r to mean something random seems popular (bionic and freebsd

both did it) so use getbasename instead.
This commit is contained in:
Rob Landley 2016-04-08 18:25:59 -05:00
parent 9b93dd397b
commit 1c028ca33d
5 changed files with 8 additions and 13 deletions

View File

@ -919,11 +919,14 @@ void mode_to_string(mode_t mode, char *buf)
*buf = c;
}
char *basename_r(char *name)
// basename() can modify its argument or return a pointer to a constant string
// This just gives after the last '/' or the whole stirng if no /
char *getbasename(char *name)
{
char *s = strrchr(name, '/');
if (s) return s+1;
return name;
}

View File

@ -286,7 +286,7 @@ char *num_to_sig(int sig);
mode_t string_to_mode(char *mode_str, mode_t base);
void mode_to_string(mode_t mode, char *buf);
char *basename_r(char *name);
char *getbasename(char *name);
void names_to_pid(char **names, int (*callback)(pid_t pid, char *name));
pid_t xvforkwrap(pid_t pid);

View File

@ -157,19 +157,11 @@ int utimensat(int fd, const char *path, const struct timespec times[2], int flag
#endif // glibc in general
#if !defined(__GLIBC__) && !defined(__BIONIC__)
#if !defined(__GLIBC__)
// POSIX basename.
#include <libgen.h>
#endif
// glibc was handled above; for 32-bit bionic we need to avoid a collision
// with toybox's basename_r so we can't include <libgen.h> even though that
// would give us a POSIX basename(3).
#if defined(__BIONIC__)
char *basename(char *path);
char *dirname(char *path);
#endif
// Work out how to do endianness
#ifndef __APPLE__

View File

@ -70,7 +70,7 @@ static char *path2mod(char *file, char *mod)
if (!file) return NULL;
if (!mod) mod = xmalloc(MODNAME_LEN);
from = basename_r(file);
from = getbasename(file);
for (i = 0; i < (MODNAME_LEN-1) && from[i] && from[i] != '.'; i++)
mod[i] = (from[i] == '-') ? '_' : from[i];

View File

@ -440,7 +440,7 @@ static void scan_pid(int pid)
if ((p = strchr(line, ' '))) *p = 0; // "/bin/netstat -ntp" -> "/bin/netstat"
snprintf(TT.current_name, sizeof(TT.current_name), "%d/%s",
pid, basename_r(line)); // "584/netstat"
pid, getbasename(line)); // "584/netstat"
free(line);
fd_dir = xmprintf("/proc/%d/fd", pid);