Permalink
Browse files

Add a basename_r() and use it in names_to_pid() to avoid basename() o…

…verwriting

itself on some inputs. (Which makes killall really impolite. Bug report
from Nicholas Noury via Elliott Hughes.)
  • Loading branch information...
landley committed Jul 10, 2015
1 parent 68771c0 commit 6292beb86fa9a3999f0f0b76185e0a893af85cd0
Showing with 10 additions and 1 deletion.
  1. +9 −1 lib/lib.c
  2. +1 −0 lib/lib.h
@@ -798,6 +798,14 @@ void mode_to_string(mode_t mode, char *buf)
*buf = c;
}

char *basename_r(char *name)
{
char *s = strrchr(name, '/');

if (s) return s+1;
return name;
}

// Execute a callback for each PID that matches a process name from a list.
void names_to_pid(char **names, int (*callback)(pid_t pid, char *name))
{
@@ -816,7 +824,7 @@ void names_to_pid(char **names, int (*callback)(pid_t pid, char *name))

for (curname = names; *curname; curname++)
if (**curname == '/' ? !strcmp(cmd, *curname)
: !strcmp(basename(cmd), basename(*curname)))
: !strcmp(basename_r(cmd), basename_r(*curname)))
if (callback(u, *curname)) break;
if (*curname) break;
}
@@ -235,6 +235,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);
void names_to_pid(char **names, int (*callback)(pid_t pid, char *name));

// Functions in need of further review/cleanup

0 comments on commit 6292beb

Please sign in to comment.