From d9eb40c18519d10aac3b3d008aa7e338ae830b72 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 12 Apr 2017 15:48:19 +0200 Subject: [PATCH] fix errors found with make_single_applets.sh Signed-off-by: Denys Vlasenko --- coreutils/cat.c | 27 --------------------------- coreutils/who.c | 5 +++-- include/libbb.h | 2 +- libbb/bb_cat.c | 33 +++++++++++++++++++++++++++++++++ libbb/print_numbered_lines.c | 29 +++++++++++++++++++++++++++++ procps/kill.c | 10 +++++----- 6 files changed, 71 insertions(+), 35 deletions(-) create mode 100644 libbb/bb_cat.c create mode 100644 libbb/print_numbered_lines.c diff --git a/coreutils/cat.c b/coreutils/cat.c index 4169d9516..96970b19d 100644 --- a/coreutils/cat.c +++ b/coreutils/cat.c @@ -16,8 +16,6 @@ //applet:IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat)) //kbuild:lib-$(CONFIG_CAT) += cat.o -// For -n: -//kbuild:lib-$(CONFIG_CAT) += nl.o /* BB_AUDIT SUSv3 compliant */ /* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */ @@ -49,31 +47,6 @@ /* This is a NOFORK applet. Be very careful! */ - -int bb_cat(char **argv) -{ - int fd; - int retval = EXIT_SUCCESS; - - if (!*argv) - argv = (char**) &bb_argv_dash; - - do { - fd = open_or_warn_stdin(*argv); - if (fd >= 0) { - /* This is not a xfunc - never exits */ - off_t r = bb_copyfd_eof(fd, STDOUT_FILENO); - if (fd != STDIN_FILENO) - close(fd); - if (r >= 0) - continue; - } - retval = EXIT_FAILURE; - } while (*++argv); - - return retval; -} - int cat_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int cat_main(int argc UNUSED_PARAM, char **argv) { diff --git a/coreutils/who.c b/coreutils/who.c index ec9d25159..4adead77e 100644 --- a/coreutils/who.c +++ b/coreutils/who.c @@ -40,11 +40,12 @@ // APPLET_ODDNAME:name main location suid_type help //applet:IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users)) -//applet:IF_USERS(APPLET_ODDNAME(w, who, BB_DIR_USR_BIN, BB_SUID_DROP, w)) +//applet:IF_W( APPLET_ODDNAME(w, who, BB_DIR_USR_BIN, BB_SUID_DROP, w)) //applet:IF_WHO( APPLET( who, BB_DIR_USR_BIN, BB_SUID_DROP)) //kbuild:lib-$(CONFIG_USERS) += who.o -//kbuild:lib-$(CONFIG_WHO) += who.o +//kbuild:lib-$(CONFIG_W) += who.o +//kbuild:lib-$(CONFIG_WHO) += who.o /* BB_AUDIT SUSv3 _NOT_ compliant -- missing options -b, -d, -l, -m, -p, -q, -r, -s, -t, -T, -u; Missing argument 'file'. */ diff --git a/include/libbb.h b/include/libbb.h index 04071639a..2c30bde6f 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1247,7 +1247,7 @@ extern void bb_logenv_override(void) FAST_FUNC; /* Applets which are useful from another applets */ -int bb_cat(char** argv); +int bb_cat(char** argv) FAST_FUNC; /* If shell needs them, they exist even if not enabled as applets */ int echo_main(int argc, char** argv) IF_ECHO(MAIN_EXTERNALLY_VISIBLE); int printf_main(int argc, char **argv) IF_PRINTF(MAIN_EXTERNALLY_VISIBLE); diff --git a/libbb/bb_cat.c b/libbb/bb_cat.c new file mode 100644 index 000000000..0a4a350fb --- /dev/null +++ b/libbb/bb_cat.c @@ -0,0 +1,33 @@ +/* vi: set sw=4 ts=4: */ +/* + * Copyright (C) 2003 Manuel Novoa III + * + * Licensed under GPLv2, see file LICENSE in this source tree. + */ +//kbuild:lib-y += bb_cat.o + +#include "libbb.h" + +int FAST_FUNC bb_cat(char **argv) +{ + int fd; + int retval = EXIT_SUCCESS; + + if (!*argv) + argv = (char**) &bb_argv_dash; + + do { + fd = open_or_warn_stdin(*argv); + if (fd >= 0) { + /* This is not a xfunc - never exits */ + off_t r = bb_copyfd_eof(fd, STDOUT_FILENO); + if (fd != STDIN_FILENO) + close(fd); + if (r >= 0) + continue; + } + retval = EXIT_FAILURE; + } while (*++argv); + + return retval; +} diff --git a/libbb/print_numbered_lines.c b/libbb/print_numbered_lines.c new file mode 100644 index 000000000..702aed1ea --- /dev/null +++ b/libbb/print_numbered_lines.c @@ -0,0 +1,29 @@ +/* vi: set sw=4 ts=4: */ +/* + * Copyright (C) 2017 Denys Vlasenko + * + * Licensed under GPLv2, see file LICENSE in this source tree. + */ +//kbuild:lib-y += print_numbered_lines.o + +#include "libbb.h" + +void FAST_FUNC print_numbered_lines(struct number_state *ns, const char *filename) +{ + FILE *fp = fopen_or_warn_stdin(filename); + unsigned N = ns->start; + char *line; + + while ((line = xmalloc_fgetline(fp)) != NULL) { + if (ns->all + || (ns->nonempty && line[0]) + ) { + printf("%*u%s%s\n", ns->width, N, ns->sep, line); + N += ns->inc; + } else if (ns->empty_str) + fputs(ns->empty_str, stdout); + free(line); + } + + fclose(fp); +} diff --git a/procps/kill.c b/procps/kill.c index 7ae5beead..975a3e8c5 100644 --- a/procps/kill.c +++ b/procps/kill.c @@ -201,7 +201,7 @@ int kill_main(int argc UNUSED_PARAM, char **argv) pid_t sid; procps_status_t* p = NULL; /* compat: exitcode 2 is "no one was signaled" */ - int ret = 2; + errors = 2; /* Find out our session id */ sid = getsid(pid); @@ -229,7 +229,7 @@ int kill_main(int argc UNUSED_PARAM, char **argv) arg = *args++; if (arg[0] != '-' || arg[1] != 'o') { bb_error_msg("bad option '%s'", arg); - ret = 1; + errors = 1; goto resume; } arg += 2; @@ -238,21 +238,21 @@ int kill_main(int argc UNUSED_PARAM, char **argv) omit = bb_strtoi(arg, NULL, 10); if (errno) { bb_error_msg("invalid number '%s'", arg); - ret = 1; + errors = 1; goto resume; } if (p->pid == omit) goto dont_kill; } kill(p->pid, signo); - ret = 0; + errors = 0; dont_kill: ; } resume: /* And let them continue */ if (signo != SIGSTOP && signo != SIGCONT) kill(-1, SIGCONT); - return ret; + return errors; } #if ENABLE_KILL || ENABLE_KILLALL