X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fsyn.c;fp=src%2Fsyn.c;h=5c07d51d884684cf64e3c53eb681cecca07fdf8c;hb=811a575c0f6a5ef00a921d14c1830ef5ae1bd796;hp=bffee7ab4bc5d47ee805f1e1a01bc2c3c4bc5d9a;hpb=f8c396c4d446a038358106a301b329607a04633d;p=android-x86%2Fexternal-mksh.git diff --git a/src/syn.c b/src/syn.c index bffee7a..5c07d51 100644 --- a/src/syn.c +++ b/src/syn.c @@ -1,8 +1,8 @@ -/* $OpenBSD: syn.c,v 1.28 2008/07/23 16:34:38 jaredy Exp $ */ +/* $OpenBSD: syn.c,v 1.29 2013/06/03 18:40:05 jca Exp $ */ /*- * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, - * 2011, 2012 + * 2011, 2012, 2013 * Thorsten Glaser * * Provided that these terms and disclaimer and all copyright notices @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.88 2012/12/28 02:28:39 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.92 2013/06/03 22:28:17 tg Exp $"); struct nesting_state { int start_token; /* token than began nesting (eg, FOR) */ @@ -53,7 +53,7 @@ static struct op *caselist(void); static struct op *casepart(int); static struct op *function_body(char *, bool); static char **wordlist(void); -static struct op *block(int, struct op *, struct op *, char **); +static struct op *block(int, struct op *, struct op *); static struct op *newtp(int); static void syntaxerr(const char *) MKSH_A_NORETURN; static void nesting_push(struct nesting_state *, int); @@ -108,9 +108,9 @@ pipeline(int cf) if ((p = get_command(CONTIN)) == NULL) syntaxerr(NULL); if (tl == NULL) - t = tl = block(TPIPE, t, p, NOWORDS); + t = tl = block(TPIPE, t, p); else - tl = tl->right = block(TPIPE, tl->right, p, NOWORDS); + tl = tl->right = block(TPIPE, tl->right, p); } REJECT; } @@ -128,7 +128,7 @@ andor(void) while ((c = token(0)) == LOGAND || c == LOGOR) { if ((p = pipeline(CONTIN)) == NULL) syntaxerr(NULL); - t = block(c == LOGAND? TAND: TOR, t, p, NOWORDS); + t = block(c == LOGAND? TAND: TOR, t, p); } REJECT; } @@ -157,16 +157,15 @@ c_list(bool multi) } else if (!p) break; else if (c == '&' || c == COPROC) - p = block(c == '&' ? TASYNC : TCOPROC, - p, NOBLOCK, NOWORDS); + p = block(c == '&' ? TASYNC : TCOPROC, p, NULL); else if (c != ';') have_sep = false; if (!t) t = p; else if (!tl) - t = tl = block(TLIST, t, p, NOWORDS); + t = tl = block(TLIST, t, p); else - tl = tl->right = block(TLIST, tl->right, p, NOWORDS); + tl = tl->right = block(TLIST, tl->right, p); if (!have_sep) break; } @@ -240,11 +239,11 @@ nested(int type, int smark, int emark) t = c_list(true); musthave(emark, KEYWORD|sALIAS); nesting_pop(&old_nesting); - return (block(type, t, NOBLOCK, NOWORDS)); + return (block(type, t, NULL)); } static const char let_cmd[] = { - CHAR, 'l', CHAR, 'e', CHAR, 't', EOS + CHAR, 'l', CHAR, 'e', CHAR, 't', CHAR, ']', EOS }; static const char setA_cmd0[] = { CHAR, 's', CHAR, 'e', CHAR, 't', EOS @@ -465,7 +464,7 @@ get_command(int cf) t = pipeline(0); if (t == NULL) syntaxerr(NULL); - t = block(TBANG, NOBLOCK, t, NOWORDS); + t = block(TBANG, NULL, t); break; case TIME: @@ -477,7 +476,7 @@ get_command(int cf) t->str[0] = '\0'; t->str[1] = '\0'; } - t = block(TTIME, t, NOBLOCK, NOWORDS); + t = block(TTIME, t, NULL); break; case FUNCTION: @@ -505,7 +504,7 @@ get_command(int cf) XPput(args, NULL); t->args = (const char **)XPclose(args); XPput(vars, NULL); - t->vars = (char **) XPclose(vars); + t->vars = (char **)XPclose(vars); } else { XPfree(args); XPfree(vars); @@ -632,7 +631,7 @@ casepart(int endtok) } while (token(0) == '|'); REJECT; XPput(ptns, NULL); - t->vars = (char **) XPclose(ptns); + t->vars = (char **)XPclose(ptns); musthave(')', 0); t->left = c_list(true); @@ -743,13 +742,8 @@ wordlist(void) XPput(args, yylval.cp); if (c != '\n' && c != ';') syntaxerr(NULL); - if (XPsize(args) == 0) { - XPfree(args); - return (NULL); - } else { - XPput(args, NULL); - return ((char **)XPclose(args)); - } + XPput(args, NULL); + return ((char **)XPclose(args)); } /* @@ -757,14 +751,13 @@ wordlist(void) */ static struct op * -block(int type, struct op *t1, struct op *t2, char **wp) +block(int type, struct op *t1, struct op *t2) { struct op *t; t = newtp(type); t->left = t1; t->right = t2; - t->vars = wp; return (t); } @@ -1131,7 +1124,7 @@ yyrecursive(int subtype MKSH_A_UNUSED) struct yyrecursive_state *ys; int stok, etok; - if (subtype == FUNSUB) { + if (subtype != COMSUB) { stok = '{'; etok = '}'; } else {