X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fbasename.c;h=8a5597e65d16e2d0517b39a153d4b9750b19ad34;hb=1abc07dcca237e6b5c98fea740e59d59c801c9e2;hp=46f7122c8514b446d472526b4c3ddb58116f8ef2;hpb=06af2165288cd6516b89001ec9e24992619230e0;p=oweals%2Fbusybox.git diff --git a/coreutils/basename.c b/coreutils/basename.c index 46f7122c8..8a5597e65 100644 --- a/coreutils/basename.c +++ b/coreutils/basename.c @@ -20,12 +20,11 @@ * 3) Save some space by using strcmp(). Calling strncmp() here was silly. */ -#include -#include -#include -#include "busybox.h" +#include "libbb.h" -int basename_main(int argc, char **argv); +/* This is a NOFORK applet. Be very careful! */ + +int basename_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int basename_main(int argc, char **argv) { size_t m, n; @@ -35,17 +34,20 @@ int basename_main(int argc, char **argv) bb_show_usage(); } - s = bb_get_last_path_component(*++argv); + /* It should strip slash: /abc/def/ -> def */ + s = bb_get_last_path_component_strip(*++argv); + m = strlen(s); if (*++argv) { n = strlen(*argv); - m = strlen(s); if ((m > n) && ((strcmp)(s+m-n, *argv) == 0)) { - s[m-n] = '\0'; + m -= n; + /*s[m] = '\0'; - redundant */ } } - puts(s); - - fflush_stdout_and_exit(EXIT_SUCCESS); + /* puts(s) will do, but we can do without stdio this way: */ + s[m++] = '\n'; + /* NB: != is correct here: */ + return full_write(STDOUT_FILENO, s, m) != (ssize_t)m; }