//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 */
/* 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)
{
// 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'. */
/* 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);
--- /dev/null
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
+ *
+ * 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;
+}
--- /dev/null
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 2017 Denys Vlasenko <vda.linux@googlemail.com>
+ *
+ * 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);
+}
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);
arg = *args++;
if (arg[0] != '-' || arg[1] != 'o') {
bb_error_msg("bad option '%s'", arg);
- ret = 1;
+ errors = 1;
goto resume;
}
arg += 2;
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