diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | coreutils/tail.c | 21 | ||||
| -rw-r--r-- | include/libbb.h | 2 | ||||
| -rw-r--r-- | networking/httpd.c | 3 | ||||
| -rw-r--r-- | networking/inetd.c | 5 | ||||
| -rw-r--r-- | networking/libiproute/iptunnel.c | 4 | ||||
| -rw-r--r-- | shell/ash.c | 8 | ||||
| -rw-r--r-- | sysklogd/logger.c | 6 |
8 files changed, 28 insertions, 23 deletions
| @@ -1,6 +1,6 @@ | |||
| 1 | VERSION = 1 | 1 | VERSION = 1 |
| 2 | PATCHLEVEL = 7 | 2 | PATCHLEVEL = 7 |
| 3 | SUBLEVEL = 2 | 3 | SUBLEVEL = 3 |
| 4 | EXTRAVERSION = | 4 | EXTRAVERSION = |
| 5 | NAME = Unnamed | 5 | NAME = Unnamed |
| 6 | 6 | ||
diff --git a/coreutils/tail.c b/coreutils/tail.c index 74e14232d..8a112346d 100644 --- a/coreutils/tail.c +++ b/coreutils/tail.c | |||
| @@ -47,13 +47,16 @@ static void tail_xprint_header(const char *fmt, const char *filename) | |||
| 47 | static ssize_t tail_read(int fd, char *buf, size_t count) | 47 | static ssize_t tail_read(int fd, char *buf, size_t count) |
| 48 | { | 48 | { |
| 49 | ssize_t r; | 49 | ssize_t r; |
| 50 | off_t current, end; | 50 | off_t current; |
| 51 | struct stat sbuf; | 51 | struct stat sbuf; |
| 52 | 52 | ||
| 53 | end = current = lseek(fd, 0, SEEK_CUR); | 53 | /* (A good comment is missing here) */ |
| 54 | if (!fstat(fd, &sbuf)) | 54 | current = lseek(fd, 0, SEEK_CUR); |
| 55 | end = sbuf.st_size; | 55 | /* /proc files report zero st_size, don't lseek them. */ |
| 56 | lseek(fd, end < current ? 0 : current, SEEK_SET); | 56 | if (fstat(fd, &sbuf) == 0 && sbuf.st_size) |
| 57 | if (sbuf.st_size < current) | ||
| 58 | lseek(fd, 0, SEEK_SET); | ||
| 59 | |||
| 57 | r = safe_read(fd, buf, count); | 60 | r = safe_read(fd, buf, count); |
| 58 | if (r < 0) { | 61 | if (r < 0) { |
| 59 | bb_perror_msg(bb_msg_read_error); | 62 | bb_perror_msg(bb_msg_read_error); |
| @@ -67,8 +70,12 @@ static const char header_fmt[] ALIGN1 = "\n==> %s <==\n"; | |||
| 67 | 70 | ||
| 68 | static unsigned eat_num(const char *p) | 71 | static unsigned eat_num(const char *p) |
| 69 | { | 72 | { |
| 70 | if (*p == '-') p++; | 73 | if (*p == '-') |
| 71 | else if (*p == '+') { p++; G.status = EXIT_FAILURE; } | 74 | p++; |
| 75 | else if (*p == '+') { | ||
| 76 | p++; | ||
| 77 | G.status = EXIT_FAILURE; | ||
| 78 | } | ||
| 72 | return xatou_sfx(p, tail_suffixes); | 79 | return xatou_sfx(p, tail_suffixes); |
| 73 | } | 80 | } |
| 74 | 81 | ||
diff --git a/include/libbb.h b/include/libbb.h index 140e21dea..76178b15f 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
| @@ -776,7 +776,7 @@ char *bb_simplify_path(const char *path); | |||
| 776 | extern void bb_do_delay(int seconds); | 776 | extern void bb_do_delay(int seconds); |
| 777 | extern void change_identity(const struct passwd *pw); | 777 | extern void change_identity(const struct passwd *pw); |
| 778 | extern const char *change_identity_e2str(const struct passwd *pw); | 778 | extern const char *change_identity_e2str(const struct passwd *pw); |
| 779 | extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args); | 779 | extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) ATTRIBUTE_NORETURN; |
| 780 | #if ENABLE_SELINUX | 780 | #if ENABLE_SELINUX |
| 781 | extern void renew_current_security_context(void); | 781 | extern void renew_current_security_context(void); |
| 782 | extern void set_current_security_context(security_context_t sid); | 782 | extern void set_current_security_context(security_context_t sid); |
diff --git a/networking/httpd.c b/networking/httpd.c index e67e6bd64..139e913f1 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
| @@ -1186,6 +1186,9 @@ static void send_cgi_and_exit( | |||
| 1186 | * and send it to the peer. So please no SIGPIPEs! */ | 1186 | * and send it to the peer. So please no SIGPIPEs! */ |
| 1187 | signal(SIGPIPE, SIG_IGN); | 1187 | signal(SIGPIPE, SIG_IGN); |
| 1188 | 1188 | ||
| 1189 | /* Accound for POSTDATA already in hdr_buf */ | ||
| 1190 | bodyLen -= hdr_cnt; | ||
| 1191 | |||
| 1189 | /* This loop still looks messy. What is an exit criteria? | 1192 | /* This loop still looks messy. What is an exit criteria? |
| 1190 | * "CGI's output closed"? Or "CGI has exited"? | 1193 | * "CGI's output closed"? Or "CGI has exited"? |
| 1191 | * What to do if CGI has closed both input and output, but | 1194 | * What to do if CGI has closed both input and output, but |
diff --git a/networking/inetd.c b/networking/inetd.c index e4e9f95b0..85e9ae732 100644 --- a/networking/inetd.c +++ b/networking/inetd.c | |||
| @@ -734,7 +734,8 @@ static servtab_t *getconfigent(void) | |||
| 734 | /* if ((arg = skip(&cp, 1)) == NULL) */ | 734 | /* if ((arg = skip(&cp, 1)) == NULL) */ |
| 735 | /* goto more; */ | 735 | /* goto more; */ |
| 736 | 736 | ||
| 737 | sep->se_server = xxstrdup(skip(&cp)); | 737 | arg = skip(&cp); |
| 738 | sep->se_server = xxstrdup(arg); | ||
| 738 | if (strcmp(sep->se_server, "internal") == 0) { | 739 | if (strcmp(sep->se_server, "internal") == 0) { |
| 739 | #ifdef INETD_FEATURE_ENABLED | 740 | #ifdef INETD_FEATURE_ENABLED |
| 740 | const struct builtin *bi; | 741 | const struct builtin *bi; |
| @@ -759,7 +760,7 @@ static servtab_t *getconfigent(void) | |||
| 759 | sep->se_bi = NULL; | 760 | sep->se_bi = NULL; |
| 760 | #endif | 761 | #endif |
| 761 | argc = 0; | 762 | argc = 0; |
| 762 | for (arg = skip(&cp); cp; arg = skip(&cp)) { | 763 | for (; cp; arg = skip(&cp)) { |
| 763 | if (argc < MAXARGV) | 764 | if (argc < MAXARGV) |
| 764 | sep->se_argv[argc++] = xxstrdup(arg); | 765 | sep->se_argv[argc++] = xxstrdup(arg); |
| 765 | } | 766 | } |
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c index 2b1713556..6d3a74165 100644 --- a/networking/libiproute/iptunnel.c +++ b/networking/libiproute/iptunnel.c | |||
| @@ -241,12 +241,12 @@ static void parse_args(int argc, char **argv, int cmd, struct ip_tunnel_parm *p) | |||
| 241 | } else if (key == ARG_remote) { | 241 | } else if (key == ARG_remote) { |
| 242 | NEXT_ARG(); | 242 | NEXT_ARG(); |
| 243 | key = index_in_strings(keywords, *argv); | 243 | key = index_in_strings(keywords, *argv); |
| 244 | if (key == ARG_any) | 244 | if (key != ARG_any) |
| 245 | p->iph.daddr = get_addr32(*argv); | 245 | p->iph.daddr = get_addr32(*argv); |
| 246 | } else if (key == ARG_local) { | 246 | } else if (key == ARG_local) { |
| 247 | NEXT_ARG(); | 247 | NEXT_ARG(); |
| 248 | key = index_in_strings(keywords, *argv); | 248 | key = index_in_strings(keywords, *argv); |
| 249 | if (key == ARG_any) | 249 | if (key != ARG_any) |
| 250 | p->iph.saddr = get_addr32(*argv); | 250 | p->iph.saddr = get_addr32(*argv); |
| 251 | } else if (key == ARG_dev) { | 251 | } else if (key == ARG_dev) { |
| 252 | NEXT_ARG(); | 252 | NEXT_ARG(); |
diff --git a/shell/ash.c b/shell/ash.c index 46f00dd3d..02cd6b77c 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -4379,6 +4379,7 @@ clear_traps(void) | |||
| 4379 | 4379 | ||
| 4380 | /* Lives far away from here, needed for forkchild */ | 4380 | /* Lives far away from here, needed for forkchild */ |
| 4381 | static void closescript(void); | 4381 | static void closescript(void); |
| 4382 | |||
| 4382 | /* Called after fork(), in child */ | 4383 | /* Called after fork(), in child */ |
| 4383 | static void | 4384 | static void |
| 4384 | forkchild(struct job *jp, union node *n, int mode) | 4385 | forkchild(struct job *jp, union node *n, int mode) |
| @@ -4423,15 +4424,8 @@ forkchild(struct job *jp, union node *n, int mode) | |||
| 4423 | setsignal(SIGQUIT); | 4424 | setsignal(SIGQUIT); |
| 4424 | setsignal(SIGTERM); | 4425 | setsignal(SIGTERM); |
| 4425 | } | 4426 | } |
| 4426 | #if JOBS | ||
| 4427 | /* For "jobs | cat" to work like in bash, we must retain list of jobs | ||
| 4428 | * in child, but we do need to remove ourself */ | ||
| 4429 | if (jp) | ||
| 4430 | freejob(jp); | ||
| 4431 | #else | ||
| 4432 | for (jp = curjob; jp; jp = jp->prev_job) | 4427 | for (jp = curjob; jp; jp = jp->prev_job) |
| 4433 | freejob(jp); | 4428 | freejob(jp); |
| 4434 | #endif | ||
| 4435 | jobless = 0; | 4429 | jobless = 0; |
| 4436 | } | 4430 | } |
| 4437 | 4431 | ||
diff --git a/sysklogd/logger.c b/sysklogd/logger.c index df5d8ff7e..6e1debd67 100644 --- a/sysklogd/logger.c +++ b/sysklogd/logger.c | |||
| @@ -107,7 +107,7 @@ int logger_main(int argc, char **argv) | |||
| 107 | argv += optind; | 107 | argv += optind; |
| 108 | if (!argc) { | 108 | if (!argc) { |
| 109 | #define strbuf bb_common_bufsiz1 | 109 | #define strbuf bb_common_bufsiz1 |
| 110 | while (fgets(strbuf, BUFSIZ, stdin)) { | 110 | while (fgets(strbuf, COMMON_BUFSIZE, stdin)) { |
| 111 | if (strbuf[0] | 111 | if (strbuf[0] |
| 112 | && NOT_LONE_CHAR(strbuf, '\n') | 112 | && NOT_LONE_CHAR(strbuf, '\n') |
| 113 | ) { | 113 | ) { |
| @@ -117,11 +117,11 @@ int logger_main(int argc, char **argv) | |||
| 117 | } | 117 | } |
| 118 | } else { | 118 | } else { |
| 119 | char *message = NULL; | 119 | char *message = NULL; |
| 120 | int len = 1; /* for NUL */ | 120 | int len = 0; |
| 121 | int pos = 0; | 121 | int pos = 0; |
| 122 | do { | 122 | do { |
| 123 | len += strlen(*argv) + 1; | 123 | len += strlen(*argv) + 1; |
| 124 | message = xrealloc(message, len); | 124 | message = xrealloc(message, len + 1); |
| 125 | sprintf(message + pos, " %s", *argv), | 125 | sprintf(message + pos, " %s", *argv), |
| 126 | pos = len; | 126 | pos = len; |
| 127 | } while (*++argv); | 127 | } while (*++argv); |
