aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2013-02-07 14:25:54 +0000
committerRon Yorston <rmy@pobox.com>2013-02-07 14:25:54 +0000
commitb604585914e032b28bef3e337a978e56a9069cda (patch)
treeb2ee0a3fb38d10397c602d0fe215ea3bbbf334c0 /shell
parent0eda07c7ff8cf1fc11bc1bda5383f884d7adf031 (diff)
parentba76b7a40b929878833731f76306b1c977cc8650 (diff)
downloadbusybox-w32-b604585914e032b28bef3e337a978e56a9069cda.tar.gz
busybox-w32-b604585914e032b28bef3e337a978e56a9069cda.tar.bz2
busybox-w32-b604585914e032b28bef3e337a978e56a9069cda.zip
Merge branch 'busybox' into merge
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c17
-rw-r--r--shell/hush.c6
-rw-r--r--shell/math.c2
3 files changed, 18 insertions, 7 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 7a50e73f3..75c01ec14 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -3737,7 +3737,8 @@ set_curjob(struct job *jp, unsigned mode)
3737 break; 3737 break;
3738 case CUR_RUNNING: 3738 case CUR_RUNNING:
3739 /* newly created job or backgrounded job, 3739 /* newly created job or backgrounded job,
3740 put after all stopped jobs. */ 3740 * put after all stopped jobs.
3741 */
3741 while (1) { 3742 while (1) {
3742 jp1 = *jpp; 3743 jp1 = *jpp;
3743#if JOBS 3744#if JOBS
@@ -9101,8 +9102,17 @@ expredir(union node *n)
9101#if ENABLE_ASH_BASH_COMPAT 9102#if ENABLE_ASH_BASH_COMPAT
9102 store_expfname: 9103 store_expfname:
9103#endif 9104#endif
9105#if 0
9106// By the design of stack allocator, the loop of this kind:
9107// while true; do while true; do break; done </dev/null; done
9108// will look like a memory leak: ash plans to free expfname's
9109// of "/dev/null" as soon as it finishes running the loop
9110// (in this case, never).
9111// This "fix" is wrong:
9104 if (redir->nfile.expfname) 9112 if (redir->nfile.expfname)
9105 stunalloc(redir->nfile.expfname); 9113 stunalloc(redir->nfile.expfname);
9114// It results in corrupted state of stacked allocations.
9115#endif
9106 redir->nfile.expfname = fn.list->text; 9116 redir->nfile.expfname = fn.list->text;
9107 break; 9117 break;
9108 case NFROMFD: 9118 case NFROMFD:
@@ -12138,8 +12148,9 @@ parsebackq: {
12138 INT_ON; 12148 INT_ON;
12139 if (oldstyle) { 12149 if (oldstyle) {
12140 /* We must read until the closing backquote, giving special 12150 /* We must read until the closing backquote, giving special
12141 treatment to some slashes, and then push the string and 12151 * treatment to some slashes, and then push the string and
12142 reread it as input, interpreting it normally. */ 12152 * reread it as input, interpreting it normally.
12153 */
12143 char *pout; 12154 char *pout;
12144 size_t psavelen; 12155 size_t psavelen;
12145 char *pstr; 12156 char *pstr;
diff --git a/shell/hush.c b/shell/hush.c
index b9e763cc8..e2dc1e2d0 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -4219,7 +4219,7 @@ static struct pipe *parse_stream(char **pstring,
4219 /* (this makes bare "&" cmd a no-op. 4219 /* (this makes bare "&" cmd a no-op.
4220 * bash says: "syntax error near unexpected token '&'") */ 4220 * bash says: "syntax error near unexpected token '&'") */
4221 if (pi->num_cmds == 0 4221 if (pi->num_cmds == 0
4222 IF_HAS_KEYWORDS( && pi->res_word == RES_NONE) 4222 IF_HAS_KEYWORDS(&& pi->res_word == RES_NONE)
4223 ) { 4223 ) {
4224 free_pipe_list(pi); 4224 free_pipe_list(pi);
4225 pi = NULL; 4225 pi = NULL;
@@ -4372,7 +4372,7 @@ static struct pipe *parse_stream(char **pstring,
4372 debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]); 4372 debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
4373 /* Do we sit outside of any if's, loops or case's? */ 4373 /* Do we sit outside of any if's, loops or case's? */
4374 if (!HAS_KEYWORDS 4374 if (!HAS_KEYWORDS
4375 IF_HAS_KEYWORDS(|| (ctx.ctx_res_w == RES_NONE && ctx.old_flag == 0)) 4375 IF_HAS_KEYWORDS(|| (ctx.ctx_res_w == RES_NONE && ctx.old_flag == 0))
4376 ) { 4376 ) {
4377 o_free(&dest); 4377 o_free(&dest);
4378#if !BB_MMU 4378#if !BB_MMU
@@ -8281,7 +8281,7 @@ static int FAST_FUNC builtin_exit(char **argv)
8281 * (if there are _stopped_ jobs, running ones don't count) 8281 * (if there are _stopped_ jobs, running ones don't count)
8282 * # exit 8282 * # exit
8283 * exit 8283 * exit
8284 # EEE (then bash exits) 8284 * EEE (then bash exits)
8285 * 8285 *
8286 * TODO: we can use G.exiting = -1 as indicator "last cmd was exit" 8286 * TODO: we can use G.exiting = -1 as indicator "last cmd was exit"
8287 */ 8287 */
diff --git a/shell/math.c b/shell/math.c
index 760645d0f..15c003965 100644
--- a/shell/math.c
+++ b/shell/math.c
@@ -410,7 +410,7 @@ arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_
410 return "exponent less than 0"; 410 return "exponent less than 0";
411 c = 1; 411 c = 1;
412 while (--right_side_val >= 0) 412 while (--right_side_val >= 0)
413 c *= rez; 413 c *= rez;
414 rez = c; 414 rez = c;
415 } 415 }
416 else if (right_side_val == 0) 416 else if (right_side_val == 0)