diff options
author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-02-19 22:44:05 +0000 |
---|---|---|
committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-02-19 22:44:05 +0000 |
commit | 26cff6c3a9282d8a928dee12f1952b669168fa97 (patch) | |
tree | d8cfbb24a3b7041ab10d6a300ecb7bcf742cd7fb /shell | |
parent | 00546df29f6b2bb32469353c219ec3e25a171957 (diff) | |
download | busybox-w32-26cff6c3a9282d8a928dee12f1952b669168fa97.tar.gz busybox-w32-26cff6c3a9282d8a928dee12f1952b669168fa97.tar.bz2 busybox-w32-26cff6c3a9282d8a928dee12f1952b669168fa97.zip |
ash: more renaming and style fixes
git-svn-id: svn://busybox.net/trunk/busybox@17932 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 256 |
1 files changed, 130 insertions, 126 deletions
diff --git a/shell/ash.c b/shell/ash.c index ffe29e066..532dad15a 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -168,7 +168,7 @@ static char *arg0; /* value of $0 */ | |||
168 | struct jmploc { | 168 | struct jmploc { |
169 | jmp_buf loc; | 169 | jmp_buf loc; |
170 | }; | 170 | }; |
171 | static struct jmploc *handler; | 171 | static struct jmploc *exception_handler; |
172 | static int exception; | 172 | static int exception; |
173 | /* exceptions */ | 173 | /* exceptions */ |
174 | #define EXINT 0 /* SIGINT received */ | 174 | #define EXINT 0 /* SIGINT received */ |
@@ -208,12 +208,12 @@ static void | |||
208 | raise_exception(int e) | 208 | raise_exception(int e) |
209 | { | 209 | { |
210 | #if DEBUG | 210 | #if DEBUG |
211 | if (handler == NULL) | 211 | if (exception_handler == NULL) |
212 | abort(); | 212 | abort(); |
213 | #endif | 213 | #endif |
214 | INT_OFF; | 214 | INT_OFF; |
215 | exception = e; | 215 | exception = e; |
216 | longjmp(handler->loc, 1); | 216 | longjmp(exception_handler->loc, 1); |
217 | } | 217 | } |
218 | 218 | ||
219 | /* | 219 | /* |
@@ -1035,11 +1035,11 @@ static int SIT(int c, int syntax) | |||
1035 | indx = 0; | 1035 | indx = 0; |
1036 | else | 1036 | else |
1037 | #endif | 1037 | #endif |
1038 | if (U_C(c) >= U_C(CTLESC) && U_C(c) <= U_C(CTLQUOTEMARK)) | 1038 | if (U_C(c) >= U_C(CTLESC) && U_C(c) <= U_C(CTLQUOTEMARK)) |
1039 | return CCTL; | 1039 | return CCTL; |
1040 | else { | 1040 | else { |
1041 | s = strchr(spec_symbls, c); | 1041 | s = strchr(spec_symbls, c); |
1042 | if (s == 0 || *s == 0) | 1042 | if (s == NULL || *s == '\0') |
1043 | return CWORD; | 1043 | return CWORD; |
1044 | indx = syntax_index_table[(s - spec_symbls)]; | 1044 | indx = syntax_index_table[(s - spec_symbls)]; |
1045 | } | 1045 | } |
@@ -1874,7 +1874,7 @@ static void init(void) | |||
1874 | struct stat st1, st2; | 1874 | struct stat st1, st2; |
1875 | 1875 | ||
1876 | initvar(); | 1876 | initvar(); |
1877 | for (envp = environ ; envp && *envp ; envp++) { | 1877 | for (envp = environ; envp && *envp; envp++) { |
1878 | if (strchr(*envp, '=')) { | 1878 | if (strchr(*envp, '=')) { |
1879 | setvareq(*envp, VEXPORT|VTEXTFIXED); | 1879 | setvareq(*envp, VEXPORT|VTEXTFIXED); |
1880 | } | 1880 | } |
@@ -2907,7 +2907,7 @@ evalfor(union node *n, int flags) | |||
2907 | 2907 | ||
2908 | setstackmark(&smark); | 2908 | setstackmark(&smark); |
2909 | arglist.lastp = &arglist.list; | 2909 | arglist.lastp = &arglist.list; |
2910 | for (argp = n->nfor.args ; argp ; argp = argp->narg.next) { | 2910 | for (argp = n->nfor.args; argp; argp = argp->narg.next) { |
2911 | expandarg(argp, &arglist, EXP_FULL | EXP_TILDE | EXP_RECORD); | 2911 | expandarg(argp, &arglist, EXP_FULL | EXP_TILDE | EXP_RECORD); |
2912 | /* XXX */ | 2912 | /* XXX */ |
2913 | if (evalskip) | 2913 | if (evalskip) |
@@ -2918,7 +2918,7 @@ evalfor(union node *n, int flags) | |||
2918 | exitstatus = 0; | 2918 | exitstatus = 0; |
2919 | loopnest++; | 2919 | loopnest++; |
2920 | flags &= EV_TESTED; | 2920 | flags &= EV_TESTED; |
2921 | for (sp = arglist.list ; sp ; sp = sp->next) { | 2921 | for (sp = arglist.list; sp; sp = sp->next) { |
2922 | setvar(n->nfor.var, sp->text, 0); | 2922 | setvar(n->nfor.var, sp->text, 0); |
2923 | evaltree(n->nfor.body, flags); | 2923 | evaltree(n->nfor.body, flags); |
2924 | if (evalskip) { | 2924 | if (evalskip) { |
@@ -2949,8 +2949,8 @@ evalcase(union node *n, int flags) | |||
2949 | arglist.lastp = &arglist.list; | 2949 | arglist.lastp = &arglist.list; |
2950 | expandarg(n->ncase.expr, &arglist, EXP_TILDE); | 2950 | expandarg(n->ncase.expr, &arglist, EXP_TILDE); |
2951 | exitstatus = 0; | 2951 | exitstatus = 0; |
2952 | for (cp = n->ncase.cases ; cp && evalskip == 0 ; cp = cp->nclist.next) { | 2952 | for (cp = n->ncase.cases; cp && evalskip == 0; cp = cp->nclist.next) { |
2953 | for (patp = cp->nclist.pattern ; patp ; patp = patp->narg.next) { | 2953 | for (patp = cp->nclist.pattern; patp; patp = patp->narg.next) { |
2954 | if (casematch(patp, arglist.list->text)) { | 2954 | if (casematch(patp, arglist.list->text)) { |
2955 | if (evalskip == 0) { | 2955 | if (evalskip == 0) { |
2956 | evaltree(cp->nclist.body, flags); | 2956 | evaltree(cp->nclist.body, flags); |
@@ -3005,9 +3005,10 @@ expredir(union node *n) | |||
3005 | { | 3005 | { |
3006 | union node *redir; | 3006 | union node *redir; |
3007 | 3007 | ||
3008 | for (redir = n ; redir ; redir = redir->nfile.next) { | 3008 | for (redir = n; redir; redir = redir->nfile.next) { |
3009 | struct arglist fn; | 3009 | struct arglist fn; |
3010 | memset(&fn, 0, sizeof(struct arglist)); | 3010 | |
3011 | memset(&fn, 0, sizeof(fn)); | ||
3011 | fn.lastp = &fn.list; | 3012 | fn.lastp = &fn.list; |
3012 | switch (redir->type) { | 3013 | switch (redir->type) { |
3013 | case NFROMTO: | 3014 | case NFROMTO: |
@@ -3022,10 +3023,9 @@ expredir(union node *n) | |||
3022 | case NTOFD: | 3023 | case NTOFD: |
3023 | if (redir->ndup.vname) { | 3024 | if (redir->ndup.vname) { |
3024 | expandarg(redir->ndup.vname, &fn, EXP_FULL | EXP_TILDE); | 3025 | expandarg(redir->ndup.vname, &fn, EXP_FULL | EXP_TILDE); |
3025 | if (fn.list != NULL) | 3026 | if (fn.list == NULL) |
3026 | fixredir(redir, fn.list->text, 1); | ||
3027 | else | ||
3028 | ash_msg_and_raise_error("redir error"); | 3027 | ash_msg_and_raise_error("redir error"); |
3028 | fixredir(redir, fn.list->text, 1); | ||
3029 | } | 3029 | } |
3030 | break; | 3030 | break; |
3031 | } | 3031 | } |
@@ -3050,13 +3050,13 @@ evalpipe(union node *n, int flags) | |||
3050 | 3050 | ||
3051 | TRACE(("evalpipe(0x%lx) called\n", (long)n)); | 3051 | TRACE(("evalpipe(0x%lx) called\n", (long)n)); |
3052 | pipelen = 0; | 3052 | pipelen = 0; |
3053 | for (lp = n->npipe.cmdlist ; lp ; lp = lp->next) | 3053 | for (lp = n->npipe.cmdlist; lp; lp = lp->next) |
3054 | pipelen++; | 3054 | pipelen++; |
3055 | flags |= EV_EXIT; | 3055 | flags |= EV_EXIT; |
3056 | INT_OFF; | 3056 | INT_OFF; |
3057 | jp = makejob(n, pipelen); | 3057 | jp = makejob(n, pipelen); |
3058 | prevfd = -1; | 3058 | prevfd = -1; |
3059 | for (lp = n->npipe.cmdlist ; lp ; lp = lp->next) { | 3059 | for (lp = n->npipe.cmdlist; lp; lp = lp->next) { |
3060 | prehash(lp->n); | 3060 | prehash(lp->n); |
3061 | pip[1] = -1; | 3061 | pip[1] = -1; |
3062 | if (lp->next) { | 3062 | if (lp->next) { |
@@ -3248,7 +3248,7 @@ evalcommand(union node *cmd, int flags) | |||
3248 | } | 3248 | } |
3249 | 3249 | ||
3250 | argv = nargv = stalloc(sizeof(char *) * (argc + 1)); | 3250 | argv = nargv = stalloc(sizeof(char *) * (argc + 1)); |
3251 | for (sp = arglist.list ; sp ; sp = sp->next) { | 3251 | for (sp = arglist.list; sp; sp = sp->next) { |
3252 | TRACE(("evalcommand arg: %s\n", sp->text)); | 3252 | TRACE(("evalcommand arg: %s\n", sp->text)); |
3253 | *nargv++ = sp->text; | 3253 | *nargv++ = sp->text; |
3254 | } | 3254 | } |
@@ -3401,7 +3401,7 @@ evalcommand(union node *cmd, int flags) | |||
3401 | 3401 | ||
3402 | if (i == EXINT || spclbltin > 0) { | 3402 | if (i == EXINT || spclbltin > 0) { |
3403 | raise: | 3403 | raise: |
3404 | longjmp(handler->loc, 1); | 3404 | longjmp(exception_handler->loc, 1); |
3405 | } | 3405 | } |
3406 | FORCE_INT_ON; | 3406 | FORCE_INT_ON; |
3407 | } | 3407 | } |
@@ -3437,8 +3437,8 @@ evalbltin(const struct builtincmd *cmd, int argc, char **argv) | |||
3437 | i = setjmp(jmploc.loc); | 3437 | i = setjmp(jmploc.loc); |
3438 | if (i) | 3438 | if (i) |
3439 | goto cmddone; | 3439 | goto cmddone; |
3440 | savehandler = handler; | 3440 | savehandler = exception_handler; |
3441 | handler = &jmploc; | 3441 | exception_handler = &jmploc; |
3442 | commandname = argv[0]; | 3442 | commandname = argv[0]; |
3443 | argptr = argv + 1; | 3443 | argptr = argv + 1; |
3444 | optptr = NULL; /* initialize nextopt */ | 3444 | optptr = NULL; /* initialize nextopt */ |
@@ -3449,7 +3449,7 @@ evalbltin(const struct builtincmd *cmd, int argc, char **argv) | |||
3449 | clearerr(stdout); | 3449 | clearerr(stdout); |
3450 | commandname = savecmdname; | 3450 | commandname = savecmdname; |
3451 | exsig = 0; | 3451 | exsig = 0; |
3452 | handler = savehandler; | 3452 | exception_handler = savehandler; |
3453 | 3453 | ||
3454 | return i; | 3454 | return i; |
3455 | } | 3455 | } |
@@ -3470,8 +3470,8 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags) | |||
3470 | goto funcdone; | 3470 | goto funcdone; |
3471 | } | 3471 | } |
3472 | INT_OFF; | 3472 | INT_OFF; |
3473 | savehandler = handler; | 3473 | savehandler = exception_handler; |
3474 | handler = &jmploc; | 3474 | exception_handler = &jmploc; |
3475 | localvars = NULL; | 3475 | localvars = NULL; |
3476 | shellparam.malloc = 0; | 3476 | shellparam.malloc = 0; |
3477 | func->count++; | 3477 | func->count++; |
@@ -3492,7 +3492,7 @@ funcdone: | |||
3492 | localvars = savelocalvars; | 3492 | localvars = savelocalvars; |
3493 | freeparam(&shellparam); | 3493 | freeparam(&shellparam); |
3494 | shellparam = saveparam; | 3494 | shellparam = saveparam; |
3495 | handler = savehandler; | 3495 | exception_handler = savehandler; |
3496 | INT_ON; | 3496 | INT_ON; |
3497 | evalskip &= ~SKIPFUNC; | 3497 | evalskip &= ~SKIPFUNC; |
3498 | return e; | 3498 | return e; |
@@ -3649,7 +3649,7 @@ static void delete_cmd_entry(void); | |||
3649 | * Exec a program. Never returns. If you change this routine, you may | 3649 | * Exec a program. Never returns. If you change this routine, you may |
3650 | * have to change the find_command routine as well. | 3650 | * have to change the find_command routine as well. |
3651 | */ | 3651 | */ |
3652 | 3652 | static void shellexec(char **, const char *, int) ATTRIBUTE_NORETURN; | |
3653 | static void | 3653 | static void |
3654 | shellexec(char **argv, const char *path, int idx) | 3654 | shellexec(char **argv, const char *path, int idx) |
3655 | { | 3655 | { |
@@ -3776,7 +3776,7 @@ padvance(const char **path, const char *name) | |||
3776 | if (*path == NULL) | 3776 | if (*path == NULL) |
3777 | return NULL; | 3777 | return NULL; |
3778 | start = *path; | 3778 | start = *path; |
3779 | for (p = start ; *p && *p != ':' && *p != '%' ; p++); | 3779 | for (p = start; *p && *p != ':' && *p != '%'; p++); |
3780 | len = p - start + strlen(name) + 2; /* "2" is for '/' and '\0' */ | 3780 | len = p - start + strlen(name) + 2; /* "2" is for '/' and '\0' */ |
3781 | while (stackblocksize() < len) | 3781 | while (stackblocksize() < len) |
3782 | growstackblock(); | 3782 | growstackblock(); |
@@ -3833,8 +3833,8 @@ hashcmd(int argc, char **argv) | |||
3833 | return 0; | 3833 | return 0; |
3834 | } | 3834 | } |
3835 | if (*argptr == NULL) { | 3835 | if (*argptr == NULL) { |
3836 | for (pp = cmdtable ; pp < &cmdtable[CMDTABLESIZE] ; pp++) { | 3836 | for (pp = cmdtable; pp < &cmdtable[CMDTABLESIZE]; pp++) { |
3837 | for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { | 3837 | for (cmdp = *pp; cmdp; cmdp = cmdp->next) { |
3838 | if (cmdp->cmdtype == CMDNORMAL) | 3838 | if (cmdp->cmdtype == CMDNORMAL) |
3839 | printentry(cmdp); | 3839 | printentry(cmdp); |
3840 | } | 3840 | } |
@@ -4077,8 +4077,8 @@ hashcd(void) | |||
4077 | struct tblentry **pp; | 4077 | struct tblentry **pp; |
4078 | struct tblentry *cmdp; | 4078 | struct tblentry *cmdp; |
4079 | 4079 | ||
4080 | for (pp = cmdtable ; pp < &cmdtable[CMDTABLESIZE] ; pp++) { | 4080 | for (pp = cmdtable; pp < &cmdtable[CMDTABLESIZE]; pp++) { |
4081 | for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { | 4081 | for (cmdp = *pp; cmdp; cmdp = cmdp->next) { |
4082 | if (cmdp->cmdtype == CMDNORMAL || ( | 4082 | if (cmdp->cmdtype == CMDNORMAL || ( |
4083 | cmdp->cmdtype == CMDBUILTIN && | 4083 | cmdp->cmdtype == CMDBUILTIN && |
4084 | !(IS_BUILTIN_REGULAR(cmdp->param.cmd)) && | 4084 | !(IS_BUILTIN_REGULAR(cmdp->param.cmd)) && |
@@ -4147,7 +4147,7 @@ clearcmdentry(int firstchange) | |||
4147 | struct tblentry *cmdp; | 4147 | struct tblentry *cmdp; |
4148 | 4148 | ||
4149 | INT_OFF; | 4149 | INT_OFF; |
4150 | for (tblp = cmdtable ; tblp < &cmdtable[CMDTABLESIZE] ; tblp++) { | 4150 | for (tblp = cmdtable; tblp < &cmdtable[CMDTABLESIZE]; tblp++) { |
4151 | pp = tblp; | 4151 | pp = tblp; |
4152 | while ((cmdp = *pp) != NULL) { | 4152 | while ((cmdp = *pp) != NULL) { |
4153 | if ((cmdp->cmdtype == CMDNORMAL && | 4153 | if ((cmdp->cmdtype == CMDNORMAL && |
@@ -4191,7 +4191,7 @@ cmdlookup(const char *name, int add) | |||
4191 | hashval += (unsigned char)*p++; | 4191 | hashval += (unsigned char)*p++; |
4192 | hashval &= 0x7FFF; | 4192 | hashval &= 0x7FFF; |
4193 | pp = &cmdtable[hashval % CMDTABLESIZE]; | 4193 | pp = &cmdtable[hashval % CMDTABLESIZE]; |
4194 | for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { | 4194 | for (cmdp = *pp; cmdp; cmdp = cmdp->next) { |
4195 | if (equal(cmdp->cmdname, name)) | 4195 | if (equal(cmdp->cmdname, name)) |
4196 | break; | 4196 | break; |
4197 | pp = &cmdp->next; | 4197 | pp = &cmdp->next; |
@@ -4499,8 +4499,7 @@ static int cvtnum(arith_t); | |||
4499 | static size_t esclen(const char *, const char *); | 4499 | static size_t esclen(const char *, const char *); |
4500 | static char *scanleft(char *, char *, char *, char *, int, int); | 4500 | static char *scanleft(char *, char *, char *, char *, int, int); |
4501 | static char *scanright(char *, char *, char *, char *, int, int); | 4501 | static char *scanright(char *, char *, char *, char *, int, int); |
4502 | static void varunset(const char *, const char *, const char *, int) | 4502 | static void varunset(const char *, const char *, const char *, int) ATTRIBUTE_NORETURN; |
4503 | ATTRIBUTE_NORETURN; | ||
4504 | 4503 | ||
4505 | 4504 | ||
4506 | #define pmatch(a, b) !fnmatch((a), (b), 0) | 4505 | #define pmatch(a, b) !fnmatch((a), (b), 0) |
@@ -5704,7 +5703,7 @@ expsort(struct strlist *str) | |||
5704 | struct strlist *sp; | 5703 | struct strlist *sp; |
5705 | 5704 | ||
5706 | len = 0; | 5705 | len = 0; |
5707 | for (sp = str ; sp ; sp = sp->next) | 5706 | for (sp = str; sp; sp = sp->next) |
5708 | len++; | 5707 | len++; |
5709 | return msort(str, len); | 5708 | return msort(str, len); |
5710 | } | 5709 | } |
@@ -5722,7 +5721,7 @@ msort(struct strlist *list, int len) | |||
5722 | return list; | 5721 | return list; |
5723 | half = len >> 1; | 5722 | half = len >> 1; |
5724 | p = list; | 5723 | p = list; |
5725 | for (n = half ; --n >= 0 ; ) { | 5724 | for (n = half; --n >= 0; ) { |
5726 | q = p; | 5725 | q = p; |
5727 | p = p->next; | 5726 | p = p->next; |
5728 | } | 5727 | } |
@@ -5874,6 +5873,7 @@ cvtnum(arith_t num) | |||
5874 | return len; | 5873 | return len; |
5875 | } | 5874 | } |
5876 | 5875 | ||
5876 | static void varunset(const char *, const char *, const char *, int) ATTRIBUTE_NORETURN; | ||
5877 | static void | 5877 | static void |
5878 | varunset(const char *end, const char *var, const char *umsg, int varflags) | 5878 | varunset(const char *end, const char *var, const char *umsg, int varflags) |
5879 | { | 5879 | { |
@@ -6573,10 +6573,9 @@ killcmd(int argc, char **argv) | |||
6573 | return 0; | 6573 | return 0; |
6574 | } | 6574 | } |
6575 | name = get_signame(signo); | 6575 | name = get_signame(signo); |
6576 | if (isdigit(*name)) | 6576 | if (!isdigit(*name)) |
6577 | out1fmt(snlfmt, name); | ||
6578 | else | ||
6579 | ash_msg_and_raise_error("invalid signal number or exit status: %s", *argptr); | 6577 | ash_msg_and_raise_error("invalid signal number or exit status: %s", *argptr); |
6578 | out1fmt(snlfmt, name); | ||
6580 | return 0; | 6579 | return 0; |
6581 | } | 6580 | } |
6582 | 6581 | ||
@@ -6834,7 +6833,7 @@ freejob(struct job *jp) | |||
6834 | int i; | 6833 | int i; |
6835 | 6834 | ||
6836 | INT_OFF; | 6835 | INT_OFF; |
6837 | for (i = jp->nprocs, ps = jp->ps ; --i >= 0 ; ps++) { | 6836 | for (i = jp->nprocs, ps = jp->ps; --i >= 0; ps++) { |
6838 | if (ps->cmd != nullstr) | 6837 | if (ps->cmd != nullstr) |
6839 | free(ps->cmd); | 6838 | free(ps->cmd); |
6840 | } | 6839 | } |
@@ -7001,7 +7000,7 @@ makejob(union node *node, int nprocs) | |||
7001 | int i; | 7000 | int i; |
7002 | struct job *jp; | 7001 | struct job *jp; |
7003 | 7002 | ||
7004 | for (i = njobs, jp = jobtab ; ; jp++) { | 7003 | for (i = njobs, jp = jobtab; ; jp++) { |
7005 | if (--i < 0) { | 7004 | if (--i < 0) { |
7006 | jp = growjobtab(); | 7005 | jp = growjobtab(); |
7007 | break; | 7006 | break; |
@@ -7772,7 +7771,7 @@ chkmail(void) | |||
7772 | break; | 7771 | break; |
7773 | if (*p == '\0') | 7772 | if (*p == '\0') |
7774 | continue; | 7773 | continue; |
7775 | for (q = p ; *q ; q++); | 7774 | for (q = p; *q; q++); |
7776 | #if DEBUG | 7775 | #if DEBUG |
7777 | if (q[-1] != '/') | 7776 | if (q[-1] != '/') |
7778 | abort(); | 7777 | abort(); |
@@ -7869,7 +7868,7 @@ int ash_main(int argc, char **argv) | |||
7869 | else | 7868 | else |
7870 | goto state4; | 7869 | goto state4; |
7871 | } | 7870 | } |
7872 | handler = &jmploc; | 7871 | exception_handler = &jmploc; |
7873 | #if DEBUG | 7872 | #if DEBUG |
7874 | opentrace(); | 7873 | opentrace(); |
7875 | trputs("Shell args: "); trargs(argv); | 7874 | trputs("Shell args: "); trargs(argv); |
@@ -8413,7 +8412,7 @@ prefix(const char *string, const char *pfx) | |||
8413 | static int | 8412 | static int |
8414 | number(const char *s) | 8413 | number(const char *s) |
8415 | { | 8414 | { |
8416 | if (! is_number(s)) | 8415 | if (!is_number(s)) |
8417 | ash_msg_and_raise_error(illnum, s); | 8416 | ash_msg_and_raise_error(illnum, s); |
8418 | return atoi(s); | 8417 | return atoi(s); |
8419 | } | 8418 | } |
@@ -8426,7 +8425,7 @@ static int | |||
8426 | is_number(const char *p) | 8425 | is_number(const char *p) |
8427 | { | 8426 | { |
8428 | do { | 8427 | do { |
8429 | if (! is_digit(*p)) | 8428 | if (!is_digit(*p)) |
8430 | return 0; | 8429 | return 0; |
8431 | } while (*++p != '\0'); | 8430 | } while (*++p != '\0'); |
8432 | return 1; | 8431 | return 1; |
@@ -8886,7 +8885,7 @@ setparam(char **argv) | |||
8886 | char **ap; | 8885 | char **ap; |
8887 | int nparam; | 8886 | int nparam; |
8888 | 8887 | ||
8889 | for (nparam = 0 ; argv[nparam] ; nparam++); | 8888 | for (nparam = 0; argv[nparam]; nparam++); |
8890 | ap = newparam = ckmalloc((nparam + 1) * sizeof(*ap)); | 8889 | ap = newparam = ckmalloc((nparam + 1) * sizeof(*ap)); |
8891 | while (*argv) { | 8890 | while (*argv) { |
8892 | *ap++ = savestr(*argv++); | 8891 | *ap++ = savestr(*argv++); |
@@ -8912,7 +8911,7 @@ freeparam(volatile struct shparam *param) | |||
8912 | char **ap; | 8911 | char **ap; |
8913 | 8912 | ||
8914 | if (param->malloc) { | 8913 | if (param->malloc) { |
8915 | for (ap = param->p ; *ap ; ap++) | 8914 | for (ap = param->p; *ap; ap++) |
8916 | free(*ap); | 8915 | free(*ap); |
8917 | free(param->p); | 8916 | free(param->p); |
8918 | } | 8917 | } |
@@ -8935,7 +8934,7 @@ shiftcmd(int argc, char **argv) | |||
8935 | ash_msg_and_raise_error("can't shift that many"); | 8934 | ash_msg_and_raise_error("can't shift that many"); |
8936 | INT_OFF; | 8935 | INT_OFF; |
8937 | shellparam.nparam -= n; | 8936 | shellparam.nparam -= n; |
8938 | for (ap1 = shellparam.p ; --n >= 0 ; ap1++) { | 8937 | for (ap1 = shellparam.p; --n >= 0; ap1++) { |
8939 | if (shellparam.malloc) | 8938 | if (shellparam.malloc) |
8940 | free(*ap1); | 8939 | free(*ap1); |
8941 | } | 8940 | } |
@@ -9163,7 +9162,7 @@ nextopt(const char *optstring) | |||
9163 | return '\0'; | 9162 | return '\0'; |
9164 | } | 9163 | } |
9165 | c = *p++; | 9164 | c = *p++; |
9166 | for (q = optstring ; *q != c ; ) { | 9165 | for (q = optstring; *q != c; ) { |
9167 | if (*q == '\0') | 9166 | if (*q == '\0') |
9168 | ash_msg_and_raise_error("Illegal option -%c", c); | 9167 | ash_msg_and_raise_error("Illegal option -%c", c); |
9169 | if (*++q == ':') | 9168 | if (*++q == ':') |
@@ -9378,8 +9377,8 @@ pipeline(void) | |||
9378 | n2->type = NNOT; | 9377 | n2->type = NNOT; |
9379 | n2->nnot.com = n1; | 9378 | n2->nnot.com = n1; |
9380 | return n2; | 9379 | return n2; |
9381 | } else | 9380 | } |
9382 | return n1; | 9381 | return n1; |
9383 | } | 9382 | } |
9384 | 9383 | ||
9385 | 9384 | ||
@@ -10254,7 +10253,7 @@ checkend: { | |||
10254 | char *p, *q; | 10253 | char *p, *q; |
10255 | 10254 | ||
10256 | p = line; | 10255 | p = line; |
10257 | for (q = eofmark + 1 ; *q && *p == *q ; p++, q++); | 10256 | for (q = eofmark + 1; *q && *p == *q; p++, q++); |
10258 | if (*p == '\n' && *q == '\0') { | 10257 | if (*p == '\n' && *q == '\0') { |
10259 | c = PEOF; | 10258 | c = PEOF; |
10260 | plinno++; | 10259 | plinno++; |
@@ -10464,8 +10463,8 @@ parsebackq: { | |||
10464 | if (str) | 10463 | if (str) |
10465 | free(str); | 10464 | free(str); |
10466 | parsebackquote = 0; | 10465 | parsebackquote = 0; |
10467 | handler = savehandler; | 10466 | exception_handler = savehandler; |
10468 | longjmp(handler->loc, 1); | 10467 | longjmp(exception_handler->loc, 1); |
10469 | } | 10468 | } |
10470 | INT_OFF; | 10469 | INT_OFF; |
10471 | str = NULL; | 10470 | str = NULL; |
@@ -10474,8 +10473,8 @@ parsebackq: { | |||
10474 | str = ckmalloc(savelen); | 10473 | str = ckmalloc(savelen); |
10475 | memcpy(str, stackblock(), savelen); | 10474 | memcpy(str, stackblock(), savelen); |
10476 | } | 10475 | } |
10477 | savehandler = handler; | 10476 | savehandler = exception_handler; |
10478 | handler = &jmploc; | 10477 | exception_handler = &jmploc; |
10479 | INT_ON; | 10478 | INT_ON; |
10480 | if (oldstyle) { | 10479 | if (oldstyle) { |
10481 | /* We must read until the closing backquote, giving special | 10480 | /* We must read until the closing backquote, giving special |
@@ -10586,7 +10585,7 @@ parsebackq: { | |||
10586 | INT_ON; | 10585 | INT_ON; |
10587 | } | 10586 | } |
10588 | parsebackquote = savepbq; | 10587 | parsebackquote = savepbq; |
10589 | handler = savehandler; | 10588 | exception_handler = savehandler; |
10590 | if (arinest || dblquote) | 10589 | if (arinest || dblquote) |
10591 | USTPUTC(CTLBACKQ | CTLQUOTE, out); | 10590 | USTPUTC(CTLBACKQ | CTLQUOTE, out); |
10592 | else | 10591 | else |
@@ -10933,7 +10932,7 @@ static void dupredirect(union node *redir, int f) | |||
10933 | 10932 | ||
10934 | if (redir->nfile.type == NTOFD || redir->nfile.type == NFROMFD) { | 10933 | if (redir->nfile.type == NTOFD || redir->nfile.type == NFROMFD) { |
10935 | if (redir->ndup.dupfd >= 0) { /* if not ">&-" */ | 10934 | if (redir->ndup.dupfd >= 0) { /* if not ">&-" */ |
10936 | copyfd(redir->ndup.dupfd, fd); | 10935 | copyfd(redir->ndup.dupfd, fd); |
10937 | } | 10936 | } |
10938 | return; | 10937 | return; |
10939 | } | 10938 | } |
@@ -10973,7 +10972,7 @@ redirect(union node *redir, int flags) | |||
10973 | q->next = redirlist; | 10972 | q->next = redirlist; |
10974 | redirlist = q; | 10973 | redirlist = q; |
10975 | q->nullredirs = nullredirs - 1; | 10974 | q->nullredirs = nullredirs - 1; |
10976 | for (i = 0 ; i < 10 ; i++) | 10975 | for (i = 0; i < 10; i++) |
10977 | q->renamed[i] = EMPTY; | 10976 | q->renamed[i] = EMPTY; |
10978 | nullredirs = 0; | 10977 | nullredirs = 0; |
10979 | sv = q; | 10978 | sv = q; |
@@ -11027,7 +11026,7 @@ popredir(int drop) | |||
11027 | return; | 11026 | return; |
11028 | INT_OFF; | 11027 | INT_OFF; |
11029 | rp = redirlist; | 11028 | rp = redirlist; |
11030 | for (i = 0 ; i < 10 ; i++) { | 11029 | for (i = 0; i < 10; i++) { |
11031 | if (rp->renamed[i] != EMPTY) { | 11030 | if (rp->renamed[i] != EMPTY) { |
11032 | if (!drop) { | 11031 | if (!drop) { |
11033 | close(i); | 11032 | close(i); |
@@ -11075,8 +11074,7 @@ copyfd(int from, int to) | |||
11075 | if (newfd < 0) { | 11074 | if (newfd < 0) { |
11076 | if (errno == EMFILE) | 11075 | if (errno == EMFILE) |
11077 | return EMPTY; | 11076 | return EMPTY; |
11078 | else | 11077 | ash_msg_and_raise_error("%d: %m", from); |
11079 | ash_msg_and_raise_error("%d: %m", from); | ||
11080 | } | 11078 | } |
11081 | return newfd; | 11079 | return newfd; |
11082 | } | 11080 | } |
@@ -11087,18 +11085,18 @@ redirectsafe(union node *redir, int flags) | |||
11087 | { | 11085 | { |
11088 | int err; | 11086 | int err; |
11089 | volatile int saveint; | 11087 | volatile int saveint; |
11090 | struct jmploc *volatile savehandler = handler; | 11088 | struct jmploc *volatile savehandler = exception_handler; |
11091 | struct jmploc jmploc; | 11089 | struct jmploc jmploc; |
11092 | 11090 | ||
11093 | SAVE_INT(saveint); | 11091 | SAVE_INT(saveint); |
11094 | err = setjmp(jmploc.loc) * 2; | 11092 | err = setjmp(jmploc.loc) * 2; |
11095 | if (!err) { | 11093 | if (!err) { |
11096 | handler = &jmploc; | 11094 | exception_handler = &jmploc; |
11097 | redirect(redir, flags); | 11095 | redirect(redir, flags); |
11098 | } | 11096 | } |
11099 | handler = savehandler; | 11097 | exception_handler = savehandler; |
11100 | if (err && exception != EXERROR) | 11098 | if (err && exception != EXERROR) |
11101 | longjmp(handler->loc, 1); | 11099 | longjmp(exception_handler->loc, 1); |
11102 | RESTORE_INT(saveint); | 11100 | RESTORE_INT(saveint); |
11103 | return err; | 11101 | return err; |
11104 | } | 11102 | } |
@@ -11152,7 +11150,7 @@ shtree(union node *n, int ind, char *pfx, FILE *fp) | |||
11152 | putc('\n', fp); | 11150 | putc('\n', fp); |
11153 | break; | 11151 | break; |
11154 | case NPIPE: | 11152 | case NPIPE: |
11155 | for (lp = n->npipe.cmdlist ; lp ; lp = lp->next) { | 11153 | for (lp = n->npipe.cmdlist; lp; lp = lp->next) { |
11156 | shcmd(lp->n, fp); | 11154 | shcmd(lp->n, fp); |
11157 | if (lp->next) | 11155 | if (lp->next) |
11158 | fputs(" | ", fp); | 11156 | fputs(" | ", fp); |
@@ -11180,24 +11178,24 @@ shcmd(union node *cmd, FILE *fp) | |||
11180 | int dftfd; | 11178 | int dftfd; |
11181 | 11179 | ||
11182 | first = 1; | 11180 | first = 1; |
11183 | for (np = cmd->ncmd.args ; np ; np = np->narg.next) { | 11181 | for (np = cmd->ncmd.args; np; np = np->narg.next) { |
11184 | if (! first) | 11182 | if (! first) |
11185 | putchar(' '); | 11183 | putchar(' '); |
11186 | sharg(np, fp); | 11184 | sharg(np, fp); |
11187 | first = 0; | 11185 | first = 0; |
11188 | } | 11186 | } |
11189 | for (np = cmd->ncmd.redirect ; np ; np = np->nfile.next) { | 11187 | for (np = cmd->ncmd.redirect; np; np = np->nfile.next) { |
11190 | if (! first) | 11188 | if (! first) |
11191 | putchar(' '); | 11189 | putchar(' '); |
11192 | switch (np->nfile.type) { | 11190 | switch (np->nfile.type) { |
11193 | case NTO: s = ">"; dftfd = 1; break; | 11191 | case NTO: s = ">"; dftfd = 1; break; |
11194 | case NCLOBBER: s = ">|"; dftfd = 1; break; | 11192 | case NCLOBBER: s = ">|"; dftfd = 1; break; |
11195 | case NAPPEND: s = ">>"; dftfd = 1; break; | 11193 | case NAPPEND: s = ">>"; dftfd = 1; break; |
11196 | case NTOFD: s = ">&"; dftfd = 1; break; | 11194 | case NTOFD: s = ">&"; dftfd = 1; break; |
11197 | case NFROM: s = "<"; dftfd = 0; break; | 11195 | case NFROM: s = "<"; dftfd = 0; break; |
11198 | case NFROMFD: s = "<&"; dftfd = 0; break; | 11196 | case NFROMFD: s = "<&"; dftfd = 0; break; |
11199 | case NFROMTO: s = "<>"; dftfd = 0; break; | 11197 | case NFROMTO: s = "<>"; dftfd = 0; break; |
11200 | default: s = "*error*"; dftfd = 0; break; | 11198 | default: s = "*error*"; dftfd = 0; break; |
11201 | } | 11199 | } |
11202 | if (np->nfile.fd != dftfd) | 11200 | if (np->nfile.fd != dftfd) |
11203 | fprintf(fp, "%d", np->nfile.fd); | 11201 | fprintf(fp, "%d", np->nfile.fd); |
@@ -11224,7 +11222,7 @@ sharg(union node *arg, FILE *fp) | |||
11224 | abort(); | 11222 | abort(); |
11225 | } | 11223 | } |
11226 | bqlist = arg->narg.backquote; | 11224 | bqlist = arg->narg.backquote; |
11227 | for (p = arg->narg.text ; *p ; p++) { | 11225 | for (p = arg->narg.text; *p; p++) { |
11228 | switch (*p) { | 11226 | switch (*p) { |
11229 | case CTLESC: | 11227 | case CTLESC: |
11230 | putc(*++p, fp); | 11228 | putc(*++p, fp); |
@@ -11301,7 +11299,7 @@ indent(int amount, char *pfx, FILE *fp) | |||
11301 | { | 11299 | { |
11302 | int i; | 11300 | int i; |
11303 | 11301 | ||
11304 | for (i = 0 ; i < amount ; i++) { | 11302 | for (i = 0; i < amount; i++) { |
11305 | if (pfx && i == amount - 1) | 11303 | if (pfx && i == amount - 1) |
11306 | fputs(pfx, fp); | 11304 | fputs(pfx, fp); |
11307 | putc('\t', fp); | 11305 | putc('\t', fp); |
@@ -11364,7 +11362,7 @@ trstring(char *s) | |||
11364 | if (debug != 1) | 11362 | if (debug != 1) |
11365 | return; | 11363 | return; |
11366 | putc('"', tracefile); | 11364 | putc('"', tracefile); |
11367 | for (p = s ; *p ; p++) { | 11365 | for (p = s; *p; p++) { |
11368 | switch (*p) { | 11366 | switch (*p) { |
11369 | case '\n': c = 'n'; goto backslash; | 11367 | case '\n': c = 'n'; goto backslash; |
11370 | case '\t': c = 't'; goto backslash; | 11368 | case '\t': c = 't'; goto backslash; |
@@ -11373,10 +11371,11 @@ trstring(char *s) | |||
11373 | case '\\': c = '\\'; goto backslash; | 11371 | case '\\': c = '\\'; goto backslash; |
11374 | case CTLESC: c = 'e'; goto backslash; | 11372 | case CTLESC: c = 'e'; goto backslash; |
11375 | case CTLVAR: c = 'v'; goto backslash; | 11373 | case CTLVAR: c = 'v'; goto backslash; |
11376 | case CTLVAR+CTLQUOTE: c = 'V'; goto backslash; | 11374 | case CTLVAR+CTLQUOTE: c = 'V'; goto backslash; |
11377 | case CTLBACKQ: c = 'q'; goto backslash; | 11375 | case CTLBACKQ: c = 'q'; goto backslash; |
11378 | case CTLBACKQ+CTLQUOTE: c = 'Q'; goto backslash; | 11376 | case CTLBACKQ+CTLQUOTE: c = 'Q'; goto backslash; |
11379 | backslash: putc('\\', tracefile); | 11377 | backslash: |
11378 | putc('\\', tracefile); | ||
11380 | putc(c, tracefile); | 11379 | putc(c, tracefile); |
11381 | break; | 11380 | break; |
11382 | default: | 11381 | default: |
@@ -11478,7 +11477,7 @@ trapcmd(int argc, char **argv) | |||
11478 | nextopt(nullstr); | 11477 | nextopt(nullstr); |
11479 | ap = argptr; | 11478 | ap = argptr; |
11480 | if (!*ap) { | 11479 | if (!*ap) { |
11481 | for (signo = 0 ; signo < NSIG ; signo++) { | 11480 | for (signo = 0; signo < NSIG; signo++) { |
11482 | if (trap[signo] != NULL) { | 11481 | if (trap[signo] != NULL) { |
11483 | const char *sn; | 11482 | const char *sn; |
11484 | 11483 | ||
@@ -11524,7 +11523,7 @@ clear_traps(void) | |||
11524 | { | 11523 | { |
11525 | char **tp; | 11524 | char **tp; |
11526 | 11525 | ||
11527 | for (tp = trap ; tp < &trap[NSIG] ; tp++) { | 11526 | for (tp = trap; tp < &trap[NSIG]; tp++) { |
11528 | if (*tp && **tp) { /* trap not NULL or SIG_IGN */ | 11527 | if (*tp && **tp) { /* trap not NULL or SIG_IGN */ |
11529 | INT_OFF; | 11528 | INT_OFF; |
11530 | free(*tp); | 11529 | free(*tp); |
@@ -11596,8 +11595,8 @@ setsignal(int signo) | |||
11596 | return; | 11595 | return; |
11597 | } | 11596 | } |
11598 | if (act.sa_handler == SIG_IGN) { | 11597 | if (act.sa_handler == SIG_IGN) { |
11599 | if (mflag && (signo == SIGTSTP || signo == SIGTTIN | 11598 | if (mflag |
11600 | || signo == SIGTTOU) | 11599 | && (signo == SIGTSTP || signo == SIGTTIN || signo == SIGTTOU) |
11601 | ) { | 11600 | ) { |
11602 | tsig = S_IGN; /* don't hard ignore these */ | 11601 | tsig = S_IGN; /* don't hard ignore these */ |
11603 | } else | 11602 | } else |
@@ -11675,7 +11674,7 @@ dotrap(void) | |||
11675 | for (i = 0, q = gotsig; i < NSIG - 1; i++, q++) { | 11674 | for (i = 0, q = gotsig; i < NSIG - 1; i++, q++) { |
11676 | if (!*q) | 11675 | if (!*q) |
11677 | continue; | 11676 | continue; |
11678 | *q = 0; | 11677 | *q = '\0'; |
11679 | 11678 | ||
11680 | p = trap[i + 1]; | 11679 | p = trap[i + 1]; |
11681 | if (!p) | 11680 | if (!p) |
@@ -11705,18 +11704,20 @@ setinteractive(int on) | |||
11705 | setsignal(SIGQUIT); | 11704 | setsignal(SIGQUIT); |
11706 | setsignal(SIGTERM); | 11705 | setsignal(SIGTERM); |
11707 | #if !ENABLE_FEATURE_SH_EXTRA_QUIET | 11706 | #if !ENABLE_FEATURE_SH_EXTRA_QUIET |
11708 | if (is_interactive > 1) { | 11707 | if (is_interactive > 1) { |
11709 | /* Looks like they want an interactive shell */ | 11708 | /* Looks like they want an interactive shell */ |
11710 | static int do_banner; | 11709 | static int do_banner; |
11711 | 11710 | ||
11712 | if (!do_banner) { | 11711 | if (!do_banner) { |
11713 | out1fmt( | 11712 | out1fmt( |
11714 | "\n\n%s Built-in shell (ash)\n" | 11713 | "\n\n" |
11715 | "Enter 'help' for a list of built-in commands.\n\n", | 11714 | "%s Built-in shell (ash)\n" |
11716 | BB_BANNER); | 11715 | "Enter 'help' for a list of built-in commands." |
11717 | do_banner++; | 11716 | "\n\n", |
11718 | } | 11717 | BB_BANNER); |
11718 | do_banner++; | ||
11719 | } | 11719 | } |
11720 | } | ||
11720 | #endif | 11721 | #endif |
11721 | } | 11722 | } |
11722 | 11723 | ||
@@ -11773,7 +11774,7 @@ exitshell(void) | |||
11773 | status = exitstatus; | 11774 | status = exitstatus; |
11774 | goto out; | 11775 | goto out; |
11775 | } | 11776 | } |
11776 | handler = &loc; | 11777 | exception_handler = &loc; |
11777 | p = trap[0]; | 11778 | p = trap[0]; |
11778 | if (p) { | 11779 | if (p) { |
11779 | trap[0] = NULL; | 11780 | trap[0] = NULL; |
@@ -11807,18 +11808,18 @@ setvarsafe(const char *name, const char *val, int flags) | |||
11807 | { | 11808 | { |
11808 | int err; | 11809 | int err; |
11809 | volatile int saveint; | 11810 | volatile int saveint; |
11810 | struct jmploc *volatile savehandler = handler; | 11811 | struct jmploc *volatile savehandler = exception_handler; |
11811 | struct jmploc jmploc; | 11812 | struct jmploc jmploc; |
11812 | 11813 | ||
11813 | SAVE_INT(saveint); | 11814 | SAVE_INT(saveint); |
11814 | if (setjmp(jmploc.loc)) | 11815 | if (setjmp(jmploc.loc)) |
11815 | err = 1; | 11816 | err = 1; |
11816 | else { | 11817 | else { |
11817 | handler = &jmploc; | 11818 | exception_handler = &jmploc; |
11818 | setvar(name, val, flags); | 11819 | setvar(name, val, flags); |
11819 | err = 0; | 11820 | err = 0; |
11820 | } | 11821 | } |
11821 | handler = savehandler; | 11822 | exception_handler = savehandler; |
11822 | RESTORE_INT(saveint); | 11823 | RESTORE_INT(saveint); |
11823 | return err; | 11824 | return err; |
11824 | } | 11825 | } |
@@ -11966,7 +11967,7 @@ bltinlookup(const char *name) | |||
11966 | { | 11967 | { |
11967 | struct strlist *sp; | 11968 | struct strlist *sp; |
11968 | 11969 | ||
11969 | for (sp = cmdenviron ; sp ; sp = sp->next) { | 11970 | for (sp = cmdenviron; sp; sp = sp->next) { |
11970 | if (varequal(sp->text, name)) | 11971 | if (varequal(sp->text, name)) |
11971 | return strchrnul(sp->text, '=') + 1; | 11972 | return strchrnul(sp->text, '=') + 1; |
11972 | } | 11973 | } |
@@ -11989,7 +11990,7 @@ listvars(int on, int off, char ***end) | |||
11989 | vpp = vartab; | 11990 | vpp = vartab; |
11990 | mask = on | off; | 11991 | mask = on | off; |
11991 | do { | 11992 | do { |
11992 | for (vp = *vpp ; vp ; vp = vp->next) | 11993 | for (vp = *vpp; vp; vp = vp->next) |
11993 | if ((vp->flags & mask) == on) { | 11994 | if ((vp->flags & mask) == on) { |
11994 | if (ep == stackstrend()) | 11995 | if (ep == stackstrend()) |
11995 | ep = growstackstr(); | 11996 | ep = growstackstr(); |
@@ -12050,26 +12051,28 @@ exportcmd(int argc, char **argv) | |||
12050 | const char *p; | 12051 | const char *p; |
12051 | char **aptr; | 12052 | char **aptr; |
12052 | int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT; | 12053 | int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT; |
12053 | int notp; | ||
12054 | 12054 | ||
12055 | notp = nextopt("p") - 'p'; | 12055 | if (nextopt("p") != 'p') { |
12056 | if (notp && ((name = *(aptr = argptr)))) { | 12056 | aptr = argptr; |
12057 | do { | 12057 | name = *aptr; |
12058 | p = strchr(name, '='); | 12058 | if (name) { |
12059 | if (p != NULL) { | 12059 | do { |
12060 | p++; | 12060 | p = strchr(name, '='); |
12061 | } else { | 12061 | if (p != NULL) { |
12062 | vp = *findvar(hashvar(name), name); | 12062 | p++; |
12063 | if (vp) { | 12063 | } else { |
12064 | vp->flags |= flag; | 12064 | vp = *findvar(hashvar(name), name); |
12065 | continue; | 12065 | if (vp) { |
12066 | vp->flags |= flag; | ||
12067 | continue; | ||
12068 | } | ||
12066 | } | 12069 | } |
12067 | } | 12070 | setvar(name, p, flag); |
12068 | setvar(name, p, flag); | 12071 | } while ((name = *++aptr) != NULL); |
12069 | } while ((name = *++aptr) != NULL); | 12072 | return 0; |
12070 | } else { | 12073 | } |
12071 | showvars(argv[0], flag, 0); | ||
12072 | } | 12074 | } |
12075 | showvars(argv[0], flag, 0); | ||
12073 | return 0; | 12076 | return 0; |
12074 | } | 12077 | } |
12075 | 12078 | ||
@@ -12187,7 +12190,7 @@ unsetcmd(int argc, char **argv) | |||
12187 | flag = i; | 12190 | flag = i; |
12188 | } | 12191 | } |
12189 | 12192 | ||
12190 | for (ap = argptr; *ap ; ap++) { | 12193 | for (ap = argptr; *ap; ap++) { |
12191 | if (flag != 'f') { | 12194 | if (flag != 'f') { |
12192 | i = unsetvar(*ap); | 12195 | i = unsetvar(*ap); |
12193 | ret |= i; | 12196 | ret |= i; |
@@ -13368,7 +13371,8 @@ static arith_t arith(const char *expr, int *perrcode) | |||
13368 | numstackptr++; | 13371 | numstackptr++; |
13369 | lasttok = TOK_NUM; | 13372 | lasttok = TOK_NUM; |
13370 | continue; | 13373 | continue; |
13371 | } else if (is_digit(arithval)) { | 13374 | } |
13375 | if (is_digit(arithval)) { | ||
13372 | numstackptr->var = NULL; | 13376 | numstackptr->var = NULL; |
13373 | #if ENABLE_ASH_MATH_SUPPORT_64 | 13377 | #if ENABLE_ASH_MATH_SUPPORT_64 |
13374 | numstackptr->val = strtoll(expr, (char **) &expr, 0); | 13378 | numstackptr->val = strtoll(expr, (char **) &expr, 0); |