shells: remove few statics and duplicated code
(much more of the same remains, alas)
function                                             old     new   delta
doset                                                330     332      +2
warn                                                  53      51      -2
onecommand                                           463     461      -2
ioecho                                                40      38      -2
forkexec                                            1412    1410      -2
err                                                   81      79      -2
setdash                                               59      56      -3
flag                                                   4       -      -4
msh_main                                            1389    1384      -5
eval                                                 388     381      -7
subgetc                                              759     747     -12
static.local                                          14       -     -14
b_adduint                                             70      52     -18
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 1/10 up/down: 2/-73)            Total: -71 bytes
diff --git a/shell/hush.c b/shell/hush.c
index 9489fb2..6173afc 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -20,7 +20,6 @@
  *      rewrites.
  *
  * Other credits:
- *      simple_itoa() was lifted from boa-0.93.15
  *      b_addchr() derived from similar w_addchar function in glibc-2.2
  *      setup_redirect(), redirect_opt_num(), and big chunks of main()
  *        and many builtins derived from contributions by Erik Andersen
@@ -280,7 +279,7 @@
 /* belongs in busybox.h */
 static int max(int a, int b)
 {
-	return (a>b)?a:b;
+	return (a > b) ? a : b;
 }
 
 /* This should be in utility.c */
@@ -811,23 +810,12 @@
 	return b_addchr(o, ch);
 }
 
-/* belongs in utility.c */
-static char *simple_itoa(unsigned i)
-{
-	static char local[sizeof(int)*3 + 2];
-	char *p = &local[sizeof(int)*3 + 2 - 1];
-	*p-- = '\0';
-	do {
-		*p-- = '0' + i % 10;
-		i /= 10;
-	} while (i > 0);
-	return p + 1;
-}
-
 static int b_adduint(o_string *o, unsigned i)
 {
 	int r;
-	char *p = simple_itoa(i);
+	char buf[sizeof(unsigned)*3 + 1];
+	char *p = buf;
+	*(utoa_to_buf(i, buf, sizeof(buf))) = '\0';
 	/* no escape checking necessary */
 	do r = b_addchr(o, *p++); while (r == 0 && *p);
 	return r;
@@ -2008,8 +1996,8 @@
 		{ "do",    RES_DO,    FLAG_DONE },
 		{ "done",  RES_DONE,  FLAG_END  }
 	};
+	enum { NRES = sizeof(reserved_list)/sizeof(reserved_list[0]) };
 	const struct reserved_combo *r;
-#define NRES sizeof(reserved_list)/sizeof(reserved_list[0])
 
 	for (r = reserved_list;	r < reserved_list+NRES; r++) {
 		if (strcmp(dest->data, r->literal) == 0) {
@@ -2113,11 +2101,13 @@
 	struct child_prog *prog = ctx->child;
 
 	if (prog && prog->group == NULL
-	         && prog->argv == NULL
-	         && prog->redirects == NULL) {
+	 && prog->argv == NULL
+	 && prog->redirects == NULL
+	) {
 		debug_printf("done_command: skipping null command\n");
 		return 0;
-	} else if (prog) {
+	}
+	if (prog) {
 		pi->num_progs++;
 		debug_printf("done_command: num_progs incremented to %d\n", pi->num_progs);
 	} else {
@@ -2172,7 +2162,7 @@
 		return -3;  /* "-" represents "close me" */
 	}
 	while (isdigit(ch)) {
-		d = d*10+(ch-'0');
+		d = d*10 + (ch-'0');
 		ok = 1;
 		b_getch(input);
 		ch = b_peek(input);
@@ -2226,7 +2216,7 @@
 	} else if (pid == 0) {
 		close(channel[0]);
 		if (channel[1] != 1) {
-			dup2(channel[1],1);
+			dup2(channel[1], 1);
 			close(channel[1]);
 		}
 		_exit(run_list_real(head));   /* leaks memory */