summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libbb.h11
-rw-r--r--libbb/u_signal_names.c200
-rw-r--r--networking/netstat.c25
-rw-r--r--networking/traceroute.c10
-rw-r--r--networking/wget.c17
-rw-r--r--procps/fuser.c22
-rw-r--r--procps/kill.c57
-rw-r--r--shell/ash.c27
-rw-r--r--shell/lash.c31
-rw-r--r--shell/msh.c41
10 files changed, 102 insertions, 339 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 0a52b64..2f90412 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -16,6 +16,7 @@
#include <ctype.h>
#include <dirent.h>
+#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <netdb.h>
@@ -25,10 +26,12 @@
#include <stdarg.h>
#include <string.h>
#include <strings.h>
+#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
+#include <sys/wait.h>
#include <termios.h>
#include <unistd.h>
@@ -178,6 +181,10 @@ extern void bb_xdaemon(int nochdir, int noclose);
extern void bb_xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
extern void bb_xlisten(int s, int backlog);
extern void bb_xchdir(const char *path);
+extern void utoa_to_buf(unsigned n, char *buf, unsigned buflen);
+extern char *utoa(unsigned n);
+extern void itoa_to_buf(int n, char *buf, unsigned buflen);
+extern char *itoa(int n);
#define BB_GETOPT_ERROR 0x80000000UL
extern const char *bb_opt_complementally;
@@ -331,7 +338,9 @@ char *dirname (char *path);
int bb_make_directory (char *path, long mode, int flags);
-const char *u_signal_names(const char *str_sig, int *signo, int startnum);
+int get_signum(char *name);
+char *get_signame(int number);
+
char *bb_simplify_path(const char *path);
enum { /* DO NOT CHANGE THESE VALUES! cp.c depends on them. */
diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c
index bf65fa3..62fab81 100644
--- a/libbb/u_signal_names.c
+++ b/libbb/u_signal_names.c
@@ -1,179 +1,59 @@
/* vi: set sw=4 ts=4: */
/*
- * Utility routines.
+ * Signal name/number conversion routines.
*
- * Copyright (C) many different people.
- * If you wrote this, please acknowledge your work.
+ * Copyright 2006 Rob Landley <rob@landley.net>
*
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-#include <signal.h>
-#include <ctype.h>
-#include <string.h>
-#include <strings.h>
-#include <stdlib.h>
-#include <stdio.h>
-
#include "libbb.h"
-struct signal_name {
- const char *name;
+static struct signal_name {
+ char *name;
int number;
+} signals[] = {
+ // SUSv3 says kill must support these, and specifies the numerical values,
+ // http://www.opengroup.org/onlinepubs/009695399/utilities/kill.html
+ {"0", 0}, {"HUP", 1}, {"INT", 2}, {"QUIT", 3}, {"ABRT", 6}, {"KILL", 9},
+ {"ALRM", 14}, {"TERM", 15},
+ // And Posix adds the following:
+ {"ILL", SIGILL}, {"TRAP", SIGTRAP}, {"FPE", SIGFPE}, {"USR1", SIGUSR1},
+ {"SEGV", SIGSEGV}, {"USR2", SIGUSR2}, {"PIPE", SIGPIPE}, {"CHLD", SIGCHLD},
+ {"CONT", SIGCONT}, {"STOP", SIGSTOP}, {"TSTP", SIGTSTP}, {"TTIN", SIGTTIN},
+ {"TTOU", SIGTTOU}
};
-static const struct signal_name signames[] = {
- /* POSIX signals */
- { "EXIT", 0 }, /* 0 */
- { "HUP", SIGHUP }, /* 1 */
- { "INT", SIGINT }, /* 2 */
- { "QUIT", SIGQUIT }, /* 3 */
- { "ILL", SIGILL }, /* 4 */
- { "ABRT", SIGABRT }, /* 6 */
- { "FPE", SIGFPE }, /* 8 */
- { "KILL", SIGKILL }, /* 9 */
- { "SEGV", SIGSEGV }, /* 11 */
- { "PIPE", SIGPIPE }, /* 13 */
- { "ALRM", SIGALRM }, /* 14 */
- { "TERM", SIGTERM }, /* 15 */
- { "USR1", SIGUSR1 }, /* 10 (arm,i386,m68k,ppc), 30 (alpha,sparc*), 16 (mips) */
- { "USR2", SIGUSR2 }, /* 12 (arm,i386,m68k,ppc), 31 (alpha,sparc*), 17 (mips) */
- { "CHLD", SIGCHLD }, /* 17 (arm,i386,m68k,ppc), 20 (alpha,sparc*), 18 (mips) */
- { "CONT", SIGCONT }, /* 18 (arm,i386,m68k,ppc), 19 (alpha,sparc*), 25 (mips) */
- { "STOP", SIGSTOP }, /* 19 (arm,i386,m68k,ppc), 17 (alpha,sparc*), 23 (mips) */
- { "TSTP", SIGTSTP }, /* 20 (arm,i386,m68k,ppc), 18 (alpha,sparc*), 24 (mips) */
- { "TTIN", SIGTTIN }, /* 21 (arm,i386,m68k,ppc,alpha,sparc*), 26 (mips) */
- { "TTOU", SIGTTOU }, /* 22 (arm,i386,m68k,ppc,alpha,sparc*), 27 (mips) */
- /* Miscellaneous other signals */
-#ifdef SIGTRAP
- { "TRAP", SIGTRAP }, /* 5 */
-#endif
-#ifdef SIGIOT
- { "IOT", SIGIOT }, /* 6, same as SIGABRT */
-#endif
-#ifdef SIGEMT
- { "EMT", SIGEMT }, /* 7 (mips,alpha,sparc*) */
-#endif
-#ifdef SIGBUS
- { "BUS", SIGBUS }, /* 7 (arm,i386,m68k,ppc), 10 (mips,alpha,sparc*) */
-#endif
-#ifdef SIGSYS
- { "SYS", SIGSYS }, /* 12 (mips,alpha,sparc*) */
-#endif
-#ifdef SIGSTKFLT
- { "STKFLT", SIGSTKFLT }, /* 16 (arm,i386,m68k,ppc) */
-#endif
-#ifdef SIGURG
- { "URG", SIGURG }, /* 23 (arm,i386,m68k,ppc), 16 (alpha,sparc*), 21 (mips) */
-#endif
-#ifdef SIGIO
- { "IO", SIGIO }, /* 29 (arm,i386,m68k,ppc), 23 (alpha,sparc*), 22 (mips) */
-#endif
-#ifdef SIGPOLL
- { "POLL", SIGPOLL }, /* same as SIGIO */
-#endif
-#ifdef SIGCLD
- { "CLD", SIGCLD }, /* same as SIGCHLD (mips) */
-#endif
-#ifdef SIGXCPU
- { "XCPU", SIGXCPU }, /* 24 (arm,i386,m68k,ppc,alpha,sparc*), 30 (mips) */
-#endif
-#ifdef SIGXFSZ
- { "XFSZ", SIGXFSZ }, /* 25 (arm,i386,m68k,ppc,alpha,sparc*), 31 (mips) */
-#endif
-#ifdef SIGVTALRM
- { "VTALRM", SIGVTALRM }, /* 26 (arm,i386,m68k,ppc,alpha,sparc*), 28 (mips) */
-#endif
-#ifdef SIGPROF
- { "PROF", SIGPROF }, /* 27 (arm,i386,m68k,ppc,alpha,sparc*), 29 (mips) */
-#endif
-#ifdef SIGPWR
- { "PWR", SIGPWR }, /* 30 (arm,i386,m68k,ppc), 29 (alpha,sparc*), 19 (mips) */
-#endif
-#ifdef SIGINFO
- { "INFO", SIGINFO }, /* 29 (alpha) */
-#endif
-#ifdef SIGLOST
- { "LOST", SIGLOST }, /* 29 (arm,i386,m68k,ppc,sparc*) */
-#endif
-#ifdef SIGWINCH
- { "WINCH", SIGWINCH }, /* 28 (arm,i386,m68k,ppc,alpha,sparc*), 20 (mips) */
-#endif
-#ifdef SIGUNUSED
- { "UNUSED", SIGUNUSED }, /* 31 (arm,i386,m68k,ppc) */
-#endif
- {0, 0}
-};
+// Convert signal name to number.
-/*
- if str_sig == NULL returned signal name [*signo],
- if str_sig != NULL - set *signo from signal_name,
- findings with digit number or with or without SIG-prefix name
-
- if startnum=0 flag for support finding zero signal,
- but str_sig="0" always found, (hmm - standart or realize?)
- if startnum<0 returned reverse signal_number <-> signal_name
- if found error - returned NULL
+int get_signum(char *name)
+{
+ int i;
+
+ i = atoi(name);
+ if(i) return i;
+ for(i=0; i < sizeof(signals) / sizeof(struct signal_name); i++)
+ if (!strcasecmp(signals[i].name, name) ||
+ (!strncasecmp(signals[i].name, "SIG", 3)
+ && !strcasecmp(signals[i].name+3, signals[i].name)))
+ return signals[i].number;
+ return -1;
+}
-*/
+// Convert signal number to name
-const char *
-u_signal_names(const char *str_sig, int *signo, int startnum)
+char *get_signame(int number)
{
- static char retstr[16];
- const struct signal_name *s = signames;
- static const char prefix[] = "SIG";
- const char *sptr;
-
- if(startnum)
- s++;
- if(str_sig==NULL) {
- while (s->name != 0) {
- if(s->number == *signo)
- break;
- s++;
- }
- } else {
- if (isdigit(((unsigned char)*str_sig))) {
- char *endp;
- long int sn = strtol(str_sig, &endp, 10);
- /* test correct and overflow */
- if(*endp == 0 && sn >= 0 && sn < NSIG) {
- *signo = (int)sn;
- /* test for unnamed */
- sptr = u_signal_names(0, signo, 0);
- if(sptr==NULL)
- return NULL;
- if(sn!=0)
- sptr += 3;
- return sptr;
- }
- } else {
- sptr = str_sig;
- while (s->name != 0) {
- if (strcasecmp(s->name, sptr) == 0) {
- *signo = s->number;
- if(startnum<0) {
- sprintf(retstr, "%d", *signo);
- return retstr;
- }
- break;
- }
- if(s!=signames && sptr == str_sig &&
- strncasecmp(sptr, prefix, 3) == 0) {
- sptr += 3; /* strlen(prefix) */
- continue;
- }
- sptr = str_sig;
- s++;
- }
+ int i;
+ static char buf[8];
+
+ itoa_to_buf(number, buf, 8);
+ for (i=0; i < sizeof(signals) / sizeof(struct signal_name); i++) {
+ if (number == signals[i].number) {
+ sprintf("SIG%s", signals[i].name);
+ break;
}
}
- if(s->name==0)
- return NULL;
- if(s!=signames)
- strcpy(retstr, prefix);
- else
- retstr[0] = 0;
- return strcat(retstr, s->name);
+
+ return buf;
}
diff --git a/networking/netstat.c b/networking/netstat.c
index 4faa40c..6d91bb3 100644
--- a/networking/netstat.c
+++ b/networking/netstat.c
@@ -11,18 +11,8 @@
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
-#include "inet_common.h"
#include "busybox.h"
-#include "pwd_.h"
+#include "inet_common.h"
#ifdef CONFIG_ROUTE
extern void displayroutes(int noresolve, int netstatfmt);
@@ -87,19 +77,6 @@ typedef enum {
#define SO_WAITDATA (1<<17) /* wait data to read */
#define SO_NOSPACE (1<<18) /* no space to write */
-static char *itoa(unsigned int i)
-{
- /* 21 digits plus null terminator, good for 64-bit or smaller ints */
- static char local[22];
- char *p = &local[21];
- *p-- = '\0';
- do {
- *p-- = '0' + i % 10;
- i /= 10;
- } while (i > 0);
- return p + 1;
-}
-
static char *get_sname(int port, const char *proto, int num)
{
char *str=itoa(ntohs(port));
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 190f19d..79f3957 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -548,7 +548,7 @@ static int
wait_for_reply(int sock, struct sockaddr_in *fromp, const struct timeval *tp)
{
fd_set fds;
- struct timeval now, wait;
+ struct timeval now, tvwait;
struct timezone tz;
int cc = 0;
socklen_t fromlen = sizeof(*fromp);
@@ -556,12 +556,12 @@ wait_for_reply(int sock, struct sockaddr_in *fromp, const struct timeval *tp)
FD_ZERO(&fds);
FD_SET(sock, &fds);
- wait.tv_sec = tp->tv_sec + waittime;
- wait.tv_usec = tp->tv_usec;
+ tvwait.tv_sec = tp->tv_sec + waittime;
+ tvwait.tv_usec = tp->tv_usec;
(void)gettimeofday(&now, &tz);
- tvsub(&wait, &now);
+ tvsub(&tvwait, &now);
- if (select(sock + 1, &fds, NULL, NULL, &wait) > 0)
+ if (select(sock + 1, &fds, NULL, NULL, &tvwait) > 0)
cc = recvfrom(sock, (char *)packet, sizeof(packet), 0,
(struct sockaddr *)fromp, &fromlen);
diff --git a/networking/wget.c b/networking/wget.c
index 64cdf62..6565bb1 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -697,12 +697,11 @@ updateprogressmeter(int ignore)
errno = save_errno;
}
-static void
-alarmtimer(int wait)
+static void alarmtimer(int iwait)
{
struct itimerval itv;
- itv.it_value.tv_sec = wait;
+ itv.it_value.tv_sec = iwait;
itv.it_value.tv_usec = 0;
itv.it_interval = itv.it_value;
setitimer(ITIMER_REAL, &itv, NULL);
@@ -715,7 +714,7 @@ progressmeter(int flag)
static struct timeval lastupdate;
static off_t lastsize, totalsize;
- struct timeval now, td, wait;
+ struct timeval now, td, tvwait;
off_t abbrevsize;
int elapsed, ratio, barlength, i;
char buf[256];
@@ -753,18 +752,18 @@ progressmeter(int flag)
/* See http://en.wikipedia.org/wiki/Tera */
fprintf(stderr, "%6d %c%c ", (int)abbrevsize, " KMGTPEZY"[i], i?'B':' ');
- timersub(&now, &lastupdate, &wait);
+ timersub(&now, &lastupdate, &tvwait);
if (transferred > lastsize) {
lastupdate = now;
lastsize = transferred;
- if (wait.tv_sec >= STALLTIME)
- timeradd(&start, &wait, &start);
- wait.tv_sec = 0;
+ if (tvwait.tv_sec >= STALLTIME)
+ timeradd(&start, &tvwait, &start);
+ tvwait.tv_sec = 0;
}
timersub(&now, &start, &td);
elapsed = td.tv_sec;
- if (wait.tv_sec >= STALLTIME) {
+ if (tvwait.tv_sec >= STALLTIME) {
fprintf(stderr, " - stalled -");
} else if (transferred <= 0 || elapsed <= 0 || transferred > totalsize || chunked) {
fprintf(stderr, "--:--:-- ETA");
diff --git a/procps/fuser.c b/procps/fuser.c
index 1a4f612..2965fc3 100644
--- a/procps/fuser.c
+++ b/procps/fuser.c
@@ -9,18 +9,6 @@
*/
#include "busybox.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <limits.h>
-#include <dirent.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/sysmacros.h>
#define FUSER_PROC_DIR "/proc"
#define FUSER_MAX_LINE 255
@@ -335,7 +323,7 @@ int fuser_main(int argc, char **argv)
optn = fuser_option(argv[i]);
if(optn) opt |= optn;
else if(argv[i][0] == '-') {
- if(!(u_signal_names(argv[i]+1, &killsig, 0)))
+ if(0>(killsig = get_signum(argv[i]+1)))
killsig = SIGTERM;
}
else {
@@ -345,7 +333,6 @@ int fuser_main(int argc, char **argv)
}
if(!fnic) return 1;
- pids = xmalloc(sizeof(pid_list));
inodes = xmalloc(sizeof(inode_list));
for(i=0;i<fnic;i++) {
if(fuser_parse_net_arg(argv[fni[i]], &proto, &port)) {
@@ -354,14 +341,13 @@ int fuser_main(int argc, char **argv)
else {
if(!fuser_file_to_dev_inode(
argv[fni[i]], &dev, &inode)) {
- free(pids);
- free(inodes);
- bb_perror_msg_and_die(
- "Could not open '%s'", argv[fni[i]]);
+ if (ENABLE_FEATURE_CLEAN_UP) free(inodes);
+ bb_perror_msg_and_die("Could not open '%s'", argv[fni[i]]);
}
fuser_add_inode(inodes, dev, inode);
}
}
+ pids = xmalloc(sizeof(pid_list));
success = fuser_scan_proc_pids(opt, inodes, pids);
/* if the first pid in the list is 0, none have been found */
if(pids->pid == 0) success = 0;
diff --git a/procps/kill.c b/procps/kill.c
index ca6f420..1814e19 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -18,22 +18,11 @@
#include <string.h>
#include <unistd.h>
-#define KILL 0
-#define KILLALL 1
-
int kill_main(int argc, char **argv)
{
- int whichApp, signo = SIGTERM;
- const char *name;
- int errors = 0;
-
-#ifdef CONFIG_KILLALL
- int quiet=0;
- /* Figure out what we are trying to do here */
- whichApp = (strcmp(bb_applet_name, "killall") == 0)? KILLALL : KILL;
-#else
- whichApp = KILL;
-#endif
+ int killall, signo = SIGTERM, errors = 0, quiet=0;
+
+ killall = (ENABLE_KILLALL && bb_applet_name[4]=='a') ? 1 : 0;
/* Parse any options */
if (argc < 2)
@@ -50,32 +39,38 @@ int kill_main(int argc, char **argv)
if(argc==2) {
/* Print the whole signal list */
int col = 0;
- for(signo=1; signo < NSIG; signo++) {
- name = u_signal_names(0, &signo, 1);
- if(name==NULL) /* unnamed */
- continue;
- col += printf("%2d) %-16s", signo, name);
+
+ for(signo = 0;;) {
+ char *name = get_signame(++signo);
+ if (isdigit(*name)) break;
+
if (col > 60) {
printf("\n");
col = 0;
}
+ col += printf("%2d) %-16s", signo, name);
}
printf("\n");
-
} else {
for(argv++; *argv; argv++) {
- name = u_signal_names(*argv, &signo, -1);
- if(name!=NULL)
- printf("%s\n", name);
+ char *name;
+
+ if (isdigit(**argv)) name = get_signame(atoi(*argv));
+ else {
+ int temp = get_signum(*argv);
+ if (temp<0)
+ bb_error_msg_and_die("unknown signal %s", *argv);
+ name = get_signame(temp);
+ }
+ puts(name);
}
}
/* If they specified -l, were all done */
return EXIT_SUCCESS;
}
-#ifdef CONFIG_KILLALL
/* The -q quiet option */
- if(whichApp != KILL && argv[1][1]=='q' && argv[1][2]=='\0'){
+ if(killall && argv[1][1]=='q' && argv[1][2]=='\0'){
quiet++;
argv++;
argc--;
@@ -83,9 +78,8 @@ int kill_main(int argc, char **argv)
goto do_it_now;
}
}
-#endif
- if(!u_signal_names(argv[1]+1, &signo, 0))
+ if(0>(signo = get_signum(argv[1]+1)))
bb_error_msg_and_die( "bad signal name '%s'", argv[1]+1);
argv+=2;
argc-=2;
@@ -96,7 +90,7 @@ do_it_now:
if (argc <= 0)
bb_show_usage();
- if (whichApp == KILL) {
+ if (!killall) {
/* Looks like they want to do a kill. Do that */
while (--argc >= 0) {
int pid;
@@ -111,10 +105,9 @@ do_it_now:
argv++;
}
- }
-#ifdef CONFIG_KILLALL
- else {
+ } else {
pid_t myPid=getpid();
+
/* Looks like they want to do a killall. Do that */
while (--argc >= 0) {
long* pidList;
@@ -141,6 +134,6 @@ do_it_now:
argv++;
}
}
-#endif
+
return errors;
}
diff --git a/shell/ash.c b/shell/ash.c
index ba99381..de8d06e 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -2035,7 +2035,6 @@ static void onsig(int);
static int dotrap(void);
static void setinteractive(int);
static void exitshell(void) ATTRIBUTE_NORETURN;
-static int decode_signal(const char *, int);
/*
* This routine is called when an error or an interrupt occurs in an
@@ -6548,7 +6547,7 @@ usage:
}
if (**++argv == '-') {
- signo = decode_signal(*argv + 1, 1);
+ signo = get_signum(*argv + 1);
if (signo < 0) {
int c;
@@ -6562,7 +6561,7 @@ usage:
list = 1;
break;
case 's':
- signo = decode_signal(optionarg, 1);
+ signo = get_signum(optionarg);
if (signo < 0) {
sh_error(
"invalid signal number or name: %s",
@@ -6588,14 +6587,14 @@ usage:
if (!*argv) {
for (i = 1; i < NSIG; i++) {
- name = u_signal_names(0, &i, 1);
- if (name)
+ name = get_signame(i);
+ if (isdigit(*name))
out1fmt(snlfmt, name);
}
return 0;
}
- name = u_signal_names(*argptr, &signo, -1);
- if (name)
+ name = get_signame(signo);
+ if (isdigit(*name))
out1fmt(snlfmt, name);
else
sh_error("invalid signal number or exit status: %s", *argptr);
@@ -11617,9 +11616,7 @@ trapcmd(int argc, char **argv)
if (trap[signo] != NULL) {
const char *sn;
- sn = u_signal_names(0, &signo, 0);
- if (sn == NULL)
- sn = "???";
+ sn = get_signame(signo);
out1fmt("trap -- %s %s\n",
single_quote(trap[signo]), sn);
}
@@ -11631,7 +11628,7 @@ trapcmd(int argc, char **argv)
else
action = *ap++;
while (*ap) {
- if ((signo = decode_signal(*ap, 0)) < 0)
+ if ((signo = get_signum(*ap)) < 0)
sh_error("%s: bad trap", *ap);
INTOFF;
if (action) {
@@ -11934,14 +11931,6 @@ out:
/* NOTREACHED */
}
-static int decode_signal(const char *string, int minsig)
-{
- int signo;
- const char *name = u_signal_names(string, &signo, minsig);
-
- return name ? signo : -1;
-}
-
/* var.c */
static struct var *vartab[VTABSIZE];
diff --git a/shell/lash.c b/shell/lash.c
index c5aaf1d..92c24d1 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -22,18 +22,7 @@
#include "busybox.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/wait.h>
-#include <unistd.h>
#include <getopt.h>
-#include <termios.h>
#include "cmdedit.h"
#ifdef CONFIG_LOCALE_SUPPORT
@@ -697,26 +686,6 @@ static int get_command(FILE * source, char *command)
return 0;
}
-static char* itoa(int i)
-{
- static char a[7]; /* Max 7 ints */
- char *b = a + sizeof(a) - 1;
- int sign = (i < 0);
-
- if (sign)
- i = -i;
- *b = 0;
- do
- {
- *--b = '0' + (i % 10);
- i /= 10;
- }
- while (i);
- if (sign)
- *--b = '-';
- return b;
-}
-
static char * strsep_space( char *string, int * ix)
{
char *token;
diff --git a/shell/msh.c b/shell/msh.c
index 6330701..b491a08 100644
--- a/shell/msh.c
+++ b/shell/msh.c
@@ -10,41 +10,12 @@
* Robert Schwebel <r.schwebel@pengutronix.de>
* Erik Andersen <andersen@codepoet.org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Original copyright notice is retained at the end of this file.
+ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
#include "busybox.h"
-#include <ctype.h>
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
#include <setjmp.h>
-#include <signal.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/stat.h>
#include <sys/times.h>
-#include <sys/types.h>
-#include <sys/wait.h>
#include "cmdedit.h"
@@ -293,7 +264,6 @@ static char *space(int n);
static char *strsave(char *s, int a);
static char *evalstr(char *cp, int f);
static char *putn(int n);
-static char *itoa(int n);
static char *unquote(char *as);
static struct var *lookup(char *n);
static int rlookup(char *n);
@@ -1252,15 +1222,6 @@ static char *putn(int n)
return (itoa(n));
}
-static char *itoa(int n)
-{
- static char s[20];
-
- snprintf(s, sizeof(s), "%u", n);
- return (s);
-}
-
-
static void next(int f)
{
PUSHIO(afile, f, filechar);