fix errors found with make_single_applets.sh

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-04-12 15:48:19 +02:00
parent 0cecbe7d5d
commit d9eb40c185
6 changed files with 71 additions and 35 deletions

View File

@ -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)
{

View File

@ -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'. */

View File

@ -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);

33
libbb/bb_cat.c Normal file
View File

@ -0,0 +1,33 @@
/* 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;
}

View File

@ -0,0 +1,29 @@
/* 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);
}

View File

@ -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