diff --git a/coreutils/test.c b/coreutils/test.c index b60c5e6d0..d2f3b1216 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -483,7 +483,7 @@ static int equalf(const char *f1, const char *f2) static enum token check_operator(const char *s) { - static const struct operator_t no_op = { + static /*const*/ struct operator_t no_op = { /*.op_num =*/ -1, /*.op_type =*/ -1 }; diff --git a/include/xatonum.h b/include/xatonum.h index b512fc599..11b301d6d 100644 --- a/include/xatonum.h +++ b/include/xatonum.h @@ -119,26 +119,6 @@ unsigned bb_strtou(const char *arg, char **endp, int base) FAST_FUNC; int bb_strtoi(const char *arg, char **endp, int base) FAST_FUNC; #endif -uint32_t BUG_bb_strtou32_unimplemented(void); -static ALWAYS_INLINE -uint32_t bb_strtou32(const char *arg, char **endp, int base) -{ - if (sizeof(uint32_t) == sizeof(unsigned)) - return bb_strtou(arg, endp, base); - if (sizeof(uint32_t) == sizeof(unsigned long)) - return bb_strtoul(arg, endp, base); - return BUG_bb_strtou32_unimplemented(); -} -static ALWAYS_INLINE -int32_t bb_strtoi32(const char *arg, char **endp, int base) -{ - if (sizeof(int32_t) == sizeof(int)) - return bb_strtoi(arg, endp, base); - if (sizeof(int32_t) == sizeof(long)) - return bb_strtol(arg, endp, base); - return BUG_bb_strtou32_unimplemented(); -} - /* Floating point */ double bb_strtod(const char *arg, char **endp) FAST_FUNC; diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 87b629022..6021ecb8d 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -63,13 +63,16 @@ char* FAST_FUNC strncpy_IFNAMSIZ(char *dst, const char *src) * A truncated result contains the first few digits of the result ala strncpy. * Returns a pointer past last generated digit, does _not_ store NUL. */ -void BUG_sizeof(void); char* FAST_FUNC utoa_to_buf(unsigned n, char *buf, unsigned buflen) { unsigned i, out, res; if (buflen) { out = 0; + if (sizeof(n) == 2) + // 2^16-1 = 65535 + i = 10000; + else if (sizeof(n) == 4) // 2^32-1 = 4294967295 i = 1000000000; @@ -80,7 +83,7 @@ char* FAST_FUNC utoa_to_buf(unsigned n, char *buf, unsigned buflen) i = 10 ** 19; #endif else - BUG_sizeof(); + bb_error_msg_and_die("Unsupported sizeof(unsigned)"); for (; i; i /= 10) { res = n / i; n = n % i; diff --git a/libbb/xfuncs.printf.c b/libbb/xfuncs.printf.c index 8af207e8c..0c8819f47 100644 --- a/libbb/xfuncs.printf.c +++ b/libbb/xfuncs.printf.c @@ -385,13 +385,6 @@ void FAST_FUNC xchdir(const char *path) bb_perror_msg_and_die("can't change directory to '%s'", path); } -void FAST_FUNC xchroot(const char *path) -{ - if (chroot(path)) - bb_perror_msg_and_die("can't change root directory to '%s'", path); - xchdir("/"); -} - // Print a warning message if opendir() fails, but don't die. DIR* FAST_FUNC warn_opendir(const char *path) { diff --git a/shell/glob.c b/shell/glob.c index 36f6704cc..6d3cc1f66 100644 --- a/shell/glob.c +++ b/shell/glob.c @@ -38,7 +38,11 @@ static int cmp_func(const void * a, const void * b) return 1; if (s2 == NULL) return -1; +#ifndef __GNO__ return strcoll(s1, s2); +#else + return strcmp(s1, s2); +#endif } diff --git a/shell/hush.c b/shell/hush.c index eb9049c2d..d7d00ad86 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -3121,7 +3121,7 @@ static const struct reserved_combo* match_reserved_word(o_string *word) static int reserved_word(o_string *word, struct parse_context *ctx) { # if ENABLE_HUSH_CASE - static const struct reserved_combo reserved_match = { + static /*const*/ struct reserved_combo reserved_match = { "", RES_MATCH, NOT_ASSIGNMENT , FLAG_MATCH | FLAG_ESAC }; # endif @@ -5870,11 +5870,13 @@ static FILE *generate_stream_from_string(const char *s, pid_t *pid_p) xpipe(channel); - pid = BB_MMU ? xfork() : xvfork_and_run(xforked_child, &args_struct); #if BB_MMU + pid = xfork(); if (pid == 0) { /* child */ xforked_child(&args_struct); } +#else + pid = xvfork_and_run(xforked_child, &args_struct); #endif /* parent */ @@ -6099,7 +6101,11 @@ static void xvforked_child(void *grandchild_args) { /* child */ pid_t pid; disable_restore_tty_pgrp_on_exit(); - pid = BB_MMU ? xfork() : xvfork_and_run(xforked_grandchild, grandchild_args); +#if BB_MMU + pid = xfork(); +#else + pid = xvfork_and_run(xforked_grandchild, grandchild_args); +#endif if (pid != 0) _exit(0); xforked_grandchild(grandchild_args); // Only get here in BB_MMU case @@ -7212,7 +7218,9 @@ static NOINLINE int run_pipe(struct pipe *pi) } #endif } +#if ENABLE_FEATURE_SH_NOFORK clean_up_and_ret: +#endif unset_vars(new_env); add_vars(old_vars); /* clean_up_and_ret0: */ @@ -7225,7 +7233,8 @@ static NOINLINE int run_pipe(struct pipe *pi) return rcode; } - if (ENABLE_FEATURE_SH_NOFORK) { +#if ENABLE_FEATURE_SH_NOFORK + { int n = find_applet_by_name(argv_expanded[0]); if (n >= 0 && APPLET_IS_NOFORK(n)) { rcode = redirect_and_varexp_helper(&new_env, &old_vars, command, squirrel, argv_expanded); @@ -7237,6 +7246,7 @@ static NOINLINE int run_pipe(struct pipe *pi) goto clean_up_and_ret; } } +#endif /* It is neither builtin nor applet. We must fork. */ } @@ -7285,11 +7295,13 @@ static NOINLINE int run_pipe(struct pipe *pi) if (cmd_no < pi->num_cmds) xpiped_pair(pipefds); - command->pid = BB_MMU ? fork() : vfork_and_run(forked_child, &args_struct); #if BB_MMU + command->pid = fork(); if (!command->pid) { /* child */ forked_child(&args_struct); } +#else + command->pid = vfork_and_run(forked_child, &args_struct); #endif /* parent or error */ diff --git a/shell/math.c b/shell/math.c index 3da151137..468993cc4 100644 --- a/shell/math.c +++ b/shell/math.c @@ -505,11 +505,20 @@ evaluate_string(arith_state_t *math_state, const char *expr) /* The proof that there can be no more than strlen(startbuf)/2+1 * integers in any given correct or incorrect expression * is left as an exercise to the reader. */ - var_or_num_t *const numstack = alloca((expr_len / 2) * sizeof(numstack[0])); + var_or_num_t *const numstack = malloc((expr_len / 2) * sizeof(numstack[0])); var_or_num_t *numstackptr = numstack; /* Stack of operator tokens */ - operator *const stack = alloca(expr_len * sizeof(stack[0])); + operator *const stack = malloc(expr_len * sizeof(stack[0])); operator *stackptr = stack; + /* Buffer to hold names of variables encountered in the expression. */ + char *const namebuf = malloc(expr_len); + char *namebufptr = namebuf; + arith_t retval = 0; + + if (numstack == NULL || stack == NULL || namebuf == NULL) { + errmsg = "memory allocation failure in arithmetic evaluation"; + goto ret_with_custom_retval; + } /* Start with a left paren */ *stackptr++ = lasttok = TOK_LPAREN; @@ -558,7 +567,8 @@ evaluate_string(arith_state_t *math_state, const char *expr) if (p != expr) { /* Name */ size_t var_name_size = (p-expr) + 1; /* +1 for NUL */ - numstackptr->var = alloca(var_name_size); + numstackptr->var = namebufptr; + namebufptr += var_name_size; safe_strncpy(numstackptr->var, expr, var_name_size); expr = p; num: @@ -693,8 +703,18 @@ evaluate_string(arith_state_t *math_state, const char *expr) err_with_custom_msg: numstack->val = -1; ret: + retval = numstack->val; + ret_with_custom_retval: math_state->errmsg = errmsg; - return numstack->val; + + if (numstack) + free(numstack); + if (stack) + free(stack); + if (namebuf) + free(namebuf); + + return retval; } arith_t FAST_FUNC