aboutsummaryrefslogtreecommitdiff
path: root/shell/msh.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/msh.c')
-rw-r--r--shell/msh.c432
1 files changed, 236 insertions, 196 deletions
diff --git a/shell/msh.c b/shell/msh.c
index 584668607..b71066abc 100644
--- a/shell/msh.c
+++ b/shell/msh.c
@@ -13,9 +13,9 @@
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-#include "busybox.h"
#include <setjmp.h>
#include <sys/times.h>
+#include "busybox.h"
/*#define MSHDEBUG 1*/
@@ -42,18 +42,18 @@ int mshdbg_rc = 0;
#else
#define DBGPRINTF(x)
-#define DBGPRINTF0(x)
-#define DBGPRINTF1(x)
-#define DBGPRINTF2(x)
-#define DBGPRINTF3(x)
-#define DBGPRINTF4(x)
-#define DBGPRINTF5(x)
-#define DBGPRINTF6(x)
-#define DBGPRINTF7(x)
-#define DBGPRINTF8(x)
-#define DBGPRINTF9(x)
-
-#define RCPRINTF(x)
+#define DBGPRINTF0(x) ((void)0)
+#define DBGPRINTF1(x) ((void)0)
+#define DBGPRINTF2(x) ((void)0)
+#define DBGPRINTF3(x) ((void)0)
+#define DBGPRINTF4(x) ((void)0)
+#define DBGPRINTF5(x) ((void)0)
+#define DBGPRINTF6(x) ((void)0)
+#define DBGPRINTF7(x) ((void)0)
+#define DBGPRINTF8(x) ((void)0)
+#define DBGPRINTF9(x) ((void)0)
+
+#define RCPRINTF(x) ((void)0)
#endif /* MSHDEBUG */
@@ -258,7 +258,8 @@ static char *elinep;
/*
* other functions
*/
-static int (*inbuilt(char *s)) (struct op *);
+typedef int (*builtin_func_ptr)(struct op *);
+static builtin_func_ptr inbuilt(char *s);
static char *rexecve(char *c, char **v, char **envp);
static char *space(int n);
@@ -577,7 +578,7 @@ static void globname(char *we, char *pp);
static char *generate(char *start1, char *end1, char *middle, char *end);
static int anyspcl(struct wdblock *wb);
static int xstrcmp(char *p1, char *p2);
-static void glob0(char *a0, unsigned int a1, int a2,
+static void glob0(char *a0, unsigned a1, int a2,
int (*a3) (char *, char *));
static void glob1(char *base, char *lim);
static void glob2(char *i, char *j);
@@ -596,7 +597,7 @@ struct here {
static const char * const signame[] = {
"Signal 0",
"Hangup",
- (char *) NULL, /* interrupt */
+ NULL, /* interrupt */
"Quit",
"Illegal instruction",
"Trace/BPT trap",
@@ -607,7 +608,7 @@ static const char * const signame[] = {
"SIGUSR1",
"SIGSEGV",
"SIGUSR2",
- (char *) NULL, /* broken pipe */
+ NULL, /* broken pipe */
"Alarm clock",
"Terminated",
};
@@ -725,21 +726,21 @@ static struct iobuf sharedbuf = { AFID_NOBUF };
static struct iobuf mainbuf = { AFID_NOBUF };
static unsigned bufid = AFID_ID; /* buffer id counter */
-static struct here *inhere; /* list of hear docs while parsing */
-static struct here *acthere; /* list of active here documents */
-static struct region *areabot; /* bottom of area */
-static struct region *areatop; /* top of area */
-static struct region *areanxt; /* starting point of scan */
+static struct here *inhere; /* list of hear docs while parsing */
+static struct here *acthere; /* list of active here documents */
+static struct region *areabot; /* bottom of area */
+static struct region *areatop; /* top of area */
+static struct region *areanxt; /* starting point of scan */
static void *brktop;
static void *brkaddr;
static struct env e = {
- line, /* linep: char ptr */
- iostack, /* iobase: struct io ptr */
- iostack - 1, /* iop: struct io ptr */
- (xint *) NULL, /* errpt: void ptr for errors? */
- FDBASE, /* iofd: file desc */
- (struct env *) NULL /* oenv: struct env ptr */
+ line, /* linep: char ptr */
+ iostack, /* iobase: struct io ptr */
+ iostack - 1, /* iop: struct io ptr */
+ (xint *) NULL, /* errpt: void ptr for errors? */
+ FDBASE, /* iofd: file desc */
+ (struct env *) NULL /* oenv: struct env ptr */
};
#ifdef MSHDEBUG
@@ -751,8 +752,6 @@ void print_t(struct op *t)
if (t->words) {
DBGPRINTF(("T: W1: %s", t->words[0]));
}
-
- return;
}
void print_tree(struct op *head)
@@ -770,8 +769,6 @@ void print_tree(struct op *head)
if (head->right)
print_tree(head->right);
-
- return;
}
#endif /* MSHDEBUG */
@@ -917,7 +914,8 @@ int msh_main(int argc, char **argv)
#endif
DBGPRINTF(("MSH_MAIN: calling newfile()\n"));
- if (newfile(name = *++argv))
+ name = *++argv;
+ if (newfile(name))
exit(1); /* Exit on error */
}
}
@@ -943,9 +941,11 @@ int msh_main(int argc, char **argv)
signal(SIGQUIT, qflag);
if (name && name[0] == '-') {
interactive++;
- if ((f = open(".profile", 0)) >= 0)
+ f = open(".profile", 0);
+ if (f >= 0)
next(remap(f));
- if ((f = open("/etc/profile", 0)) >= 0)
+ f = open("/etc/profile", 0);
+ if (f >= 0)
next(remap(f));
}
if (interactive)
@@ -958,7 +958,8 @@ int msh_main(int argc, char **argv)
dolv[0] = name;
if (dolc > 1) {
for (ap = ++argv; --argc > 0;) {
- if (assign(*ap = *argv++, !COPYV)) {
+ *ap = *argv++;
+ if (assign(*ap, !COPYV)) {
dolc--; /* keyword */
} else {
ap++;
@@ -995,7 +996,7 @@ static void setdash(void)
for (c = 'a'; c <= 'z'; c++)
if (flag[c])
*cp++ = c;
- *cp = 0;
+ *cp = '\0';
setval(lookup("-"), m);
}
@@ -1005,6 +1006,7 @@ static int newfile(char *s)
DBGPRINTF7(("NEWFILE: opening %s\n", s));
+ f = 0;
if (NOT_LONE_DASH(s)) {
DBGPRINTF(("NEWFILE: s is %s\n", s));
f = open(s, 0);
@@ -1013,8 +1015,7 @@ static int newfile(char *s)
err(": cannot open");
return 1;
}
- } else
- f = 0;
+ }
next(remap(f));
return 0;
@@ -1078,8 +1079,10 @@ static void onecommand(void)
intr = 0;
execflg = 0;
- setjmp(failpt = m1); /* Bruce Evans' fix */
- if (setjmp(failpt = m1) || yyparse() || intr) {
+ failpt = m1;
+ setjmp(failpt); /* Bruce Evans' fix */
+ failpt = m1;
+ if (setjmp(failpt) || yyparse() || intr) {
DBGPRINTF(("ONECOMMAND: this is not good.\n"));
@@ -1253,7 +1256,7 @@ static char *space(int n)
char *cp;
cp = getcell(n);
- if (cp == 0)
+ if (cp == '\0')
err("out of string space");
return cp;
}
@@ -1289,7 +1292,7 @@ static void runtrap(int i)
return;
if (i == 0)
- trap[i] = 0;
+ trap[i] = NULL;
RUN(aword, trapstr, nlchar);
}
@@ -1329,7 +1332,7 @@ static struct var *lookup(char *n)
for (cp = vp->name; (*cp = *n++) && *cp != '='; cp++);
if (*cp == 0)
*cp = '=';
- *++cp = 0;
+ *++cp = '\0';
setarea((char *) vp, 0);
setarea((char *) vp->name, 0);
vp->value = null;
@@ -1369,13 +1372,13 @@ static void nameval(struct var *vp, char *val, char *name)
fl = 0;
if (name == NULL) {
xp = space(strlen(vp->name) + strlen(val) + 2);
- if (xp == 0)
+ if (xp == NULL)
return;
/* make string: name=value */
setarea((char *) xp, 0);
name = xp;
for (cp = vp->name; (*xp = *cp++) && *xp != '='; xp++);
- if (*xp++ == 0)
+ if (*xp++ == '\0')
xp[-1] = '=';
nv = xp;
for (cp = val; (*xp++ = *cp++) != '\0';);
@@ -1407,7 +1410,7 @@ static int isassign(char *s)
if (!isalpha((int) *s) && *s != '_')
return 0;
for (; *s != '='; s++)
- if (*s == 0 || (!isalnum(*s) && *s != '_'))
+ if (*s == '\0' || (!isalnum(*s) && *s != '_'))
return 0;
return 1;
@@ -1423,7 +1426,7 @@ static int assign(char *s, int cf)
if (!isalpha(*s) && *s != '_')
return 0;
for (cp = s; *cp != '='; cp++)
- if (*cp == 0 || (!isalnum(*cp) && *cp != '_'))
+ if (*cp == '\0' || (!isalnum(*cp) && *cp != '_'))
return 0;
vp = lookup(s);
nameval(vp, ++cp, cf == COPYV ? (char *) NULL : s);
@@ -1461,10 +1464,10 @@ static void putvlist(int f, int out)
static int eqname(char *n1, char *n2)
{
- for (; *n1 != '=' && *n1 != 0; n1++)
+ for (; *n1 != '=' && *n1 != '\0'; n1++)
if (*n2++ != *n1)
return 0;
- return *n2 == 0 || *n2 == '=';
+ return *n2 == '\0' || *n2 == '=';
}
static char *findeq(char *cp)
@@ -1520,14 +1523,15 @@ static int gmatch(char *s, char *p)
return 0;
}
}
- return *s == 0;
+ return *s == '\0';
}
static char *cclass(char *p, int sub)
{
int c, d, not, found;
- if ((not = *p == NOT) != 0)
+ not = (*p == NOT);
+ if (not != 0)
p++;
found = not;
do {
@@ -1554,7 +1558,14 @@ static char *cclass(char *p, int sub)
* It is assumed that sbrk() and brk() manipulate the high end.
*/
-#define sbrk(X) ({ void * __q = (void *)-1; if (brkaddr + (int)(X) < brktop) { __q = brkaddr; brkaddr+=(int)(X); } __q;})
+#define sbrk(X) ({ \
+ void * __q = (void *)-1; \
+ if (brkaddr + (int)(X) < brktop) { \
+ __q = brkaddr; \
+ brkaddr += (int)(X); \
+ } \
+ __q; \
+})
static void initarea(void)
{
@@ -1666,7 +1677,8 @@ static void setarea(char *cp, int a)
{
struct region *p;
- if ((p = (struct region *) cp) != NULL)
+ p = (struct region *) cp;
+ if (p != NULL)
(p - 1)->area = a;
}
@@ -1839,7 +1851,8 @@ static int synio(int cf)
static void musthave(int c, int cf)
{
- if ((peeksym = yylex(cf)) != c) {
+ peeksym = yylex(cf);
+ if (peeksym != c) {
DBGPRINTF7(("MUSTHAVE: error!\n"));
SYNTAXERR;
}
@@ -2301,7 +2314,6 @@ static int yylex(int cf)
return c;
}
-
nlseen = 0;
atstart = startl;
startl = 0;
@@ -2311,14 +2323,15 @@ static int yylex(int cf)
/* MALAMO */
line[LINELIM - 1] = '\0';
- loop:
+ loop:
while ((c = my_getc(0)) == ' ' || c == '\t') /* Skip whitespace */
;
switch (c) {
default:
if (any(c, "0123456789")) {
- unget(c1 = my_getc(0));
+ c1 = my_getc(0);
+ unget(c1);
if (c1 == '<' || c1 == '>') {
iounit = c - '0';
goto loop;
@@ -2329,7 +2342,7 @@ static int yylex(int cf)
break;
case '#': /* Comment, skip to next newline or End-of-string */
- while ((c = my_getc(0)) != 0 && c != '\n');
+ while ((c = my_getc(0)) != '\0' && c != '\n');
unget(c);
goto loop;
@@ -2340,8 +2353,10 @@ static int yylex(int cf)
case '$':
DBGPRINTF9(("YYLEX: found $\n"));
*e.linep++ = c;
- if ((c = my_getc(0)) == '{') {
- if ((c = collect(c, '}')) != '\0')
+ c = my_getc(0);
+ if (c == '{') {
+ c = collect(c, '}');
+ if (c != '\0')
return c;
goto pack;
}
@@ -2350,7 +2365,8 @@ static int yylex(int cf)
case '`':
case '\'':
case '"':
- if ((c = collect(c, c)) != '\0')
+ c = collect(c, c);
+ if (c != '\0')
return c;
goto pack;
@@ -2359,10 +2375,10 @@ static int yylex(int cf)
case ';':
startl = 1;
/* If more chars process them, else return NULL char */
- if ((c1 = dual(c)) != '\0')
+ c1 = dual(c);
+ if (c1 != '\0')
return c1;
- else
- return c;
+ return c;
case '^':
startl = 1;
@@ -2397,8 +2413,8 @@ static int yylex(int cf)
unget(c);
- pack:
- while ((c = my_getc(0)) != 0 && !any(c, "`$ '\"\t;&<>()|^\n")) {
+ pack:
+ while ((c = my_getc(0)) != '\0' && !any(c, "`$ '\"\t;&<>()|^\n")) {
if (e.linep >= elinep)
err("word too long");
else
@@ -2412,9 +2428,12 @@ static int yylex(int cf)
*e.linep++ = '\0';
- if (atstart && (c = rlookup(line)) != 0) {
- startl = 1;
- return c;
+ if (atstart) {
+ c = rlookup(line);
+ if (c != 0) {
+ startl = 1;
+ return c;
+ }
}
yylval.cp = strsave(line, areanum);
@@ -2464,15 +2483,15 @@ static int dual(int c)
DBGPRINTF8(("DUAL: enter, c=%d\n", c));
- *cp++ = c; /* c is the given "peek" char */
- *cp++ = my_getc(0); /* get next char of input */
- *cp = 0; /* add EOS marker */
+ *cp++ = c; /* c is the given "peek" char */
+ *cp++ = my_getc(0); /* get next char of input */
+ *cp = '\0'; /* add EOS marker */
- c = rlookup(s); /* see if 2 chars form a shell multiline */
+ c = rlookup(s); /* see if 2 chars form a shell multiline */
if (c == 0)
- unget(*--cp); /* String is not a shell multiline, put peek char back */
+ unget(*--cp); /* String is not a shell multiline, put peek char back */
- return c; /* String is multiline, return numeric multiline (restab) code */
+ return c; /* String is multiline, return numeric multiline (restab) code */
}
static void diag(int ec)
@@ -2485,10 +2504,10 @@ static void diag(int ec)
if (c == '>' || c == '<') {
if (c != ec)
zzerr();
- yylval.i = ec == '>' ? IOWRITE | IOCAT : IOHERE;
+ yylval.i = (ec == '>' ? IOWRITE | IOCAT : IOHERE);
c = my_getc(0);
} else
- yylval.i = ec == '>' ? IOWRITE : IOREAD;
+ yylval.i = (ec == '>' ? IOWRITE : IOREAD);
if (c != '&' || yylval.i == IOHERE)
unget(c);
else
@@ -2603,20 +2622,7 @@ static int execute(struct op *t, int *pin, int *pout, int act)
DBGPRINTF7(("EXECUTE: TASYNC clause, calling vfork()...\n"));
i = vfork();
- if (i != 0) {
- interactive = hinteractive;
- if (i != -1) {
- setval(lookup("!"), putn(i));
- if (pin != NULL)
- closepipe(pin);
- if (interactive) {
- prs(putn(i));
- prs("\n");
- }
- } else
- rv = -1;
- setstatus(rv);
- } else {
+ if (i == 0) { /* child */
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
if (interactive)
@@ -2628,6 +2634,18 @@ static int execute(struct op *t, int *pin, int *pout, int act)
}
_exit(execute(t->left, pin, pout, FEXEC));
}
+ interactive = hinteractive;
+ if (i != -1) {
+ setval(lookup("!"), putn(i));
+ if (pin != NULL)
+ closepipe(pin);
+ if (interactive) {
+ prs(putn(i));
+ prs("\n");
+ }
+ } else
+ rv = -1;
+ setstatus(rv);
}
break;
@@ -2642,7 +2660,8 @@ static int execute(struct op *t, int *pin, int *pout, int act)
case TFOR:
if (wp == NULL) {
wp = dolv + 1;
- if ((i = dolc) < 0)
+ i = dolc;
+ if (i < 0)
i = 0;
} else {
i = -1;
@@ -2683,7 +2702,7 @@ static int execute(struct op *t, int *pin, int *pout, int act)
case TCASE:
cp = evalstr(t->str, DOSUB | DOTRIM);
- if (cp == 0)
+ if (cp == NULL)
cp = "";
DBGPRINTF7(("EXECUTE: TCASE, t->str is %s, cp is %s\n",
@@ -2700,15 +2719,20 @@ static int execute(struct op *t, int *pin, int *pout, int act)
case TBRACE:
/*
- if (iopp = t->ioact)
+ iopp = t->ioact;
+ if (i)
while (*iopp)
if (iosetup(*iopp++, pin!=NULL, pout!=NULL)) {
rv = -1;
break;
}
*/
- if (rv >= 0 && (t1 = t->left))
- rv = execute(t1, pin, pout, 0);
+ if (rv >= 0) {
+ t1 = t->left;
+ if (t1) {
+ rv = execute(t1, pin, pout, 0);
+ }
+ }
break;
};
@@ -2739,7 +2763,7 @@ forkexec(struct op *t, int *pin, int *pout, int act, char **wp)
{
pid_t newpid;
int i, rv;
- int (*shcom) (struct op *) = NULL;
+ builtin_func_ptr shcom = NULL;
int f;
char *cp = NULL;
struct ioword **iopp;
@@ -2787,10 +2811,12 @@ forkexec(struct op *t, int *pin, int *pout, int act, char **wp)
}
if (cp == NULL && t->ioact == NULL) {
- while ((cp = *owp++) != NULL && assign(cp, COPYV));
+ while ((cp = *owp++) != NULL && assign(cp, COPYV))
+ /**/;
DBGPRINTF(("FORKEXEC: returning setstatus()\n"));
return setstatus(0);
- } else if (cp != NULL) {
+ }
+ if (cp != NULL) {
shcom = inbuilt(cp);
}
}
@@ -2820,7 +2846,6 @@ forkexec(struct op *t, int *pin, int *pout, int act, char **wp)
return -1;
}
-
if (newpid > 0) { /* Parent */
/* Restore values */
@@ -2858,7 +2883,6 @@ forkexec(struct op *t, int *pin, int *pout, int act, char **wp)
execflg = 0;
}
-
if (owp != NULL)
while ((cp = *owp++) != NULL && assign(cp, COPYV))
if (shcom == NULL)
@@ -2957,8 +2981,9 @@ static int iosetup(struct ioword *iop, int pipein, int pipeout)
msg = iop->io_flag & (IOREAD | IOHERE) ? "open" : "create";
if ((iop->io_flag & IOHERE) == 0) {
- cp = iop->io_name;
- if ((cp = evalstr(cp, DOSUB | DOTRIM)) == NULL)
+ cp = iop->io_name; /* huh?? */
+ cp = evalstr(cp, DOSUB | DOTRIM);
+ if (cp == NULL)
return 1;
}
@@ -2984,7 +3009,8 @@ static int iosetup(struct ioword *iop, int pipein, int pipeout)
break;
case IOWRITE | IOCAT:
- if ((u = open(cp, 1)) >= 0) {
+ u = open(cp, 1);
+ if (u >= 0) {
lseek(u, (long) 0, SEEK_END);
break;
}
@@ -3005,11 +3031,10 @@ static int iosetup(struct ioword *iop, int pipein, int pipeout)
prs(": cannot ");
warn(msg);
return 1;
- } else {
- if (u != iop->io_unit) {
- dup2(u, iop->io_unit);
- close(u);
- }
+ }
+ if (u != iop->io_unit) {
+ dup2(u, iop->io_unit);
+ close(u);
}
return 0;
}
@@ -3033,7 +3058,6 @@ static struct op **find1case(struct op *t, char *w)
struct op **tp;
char **wp, *cp;
-
if (t == NULL) {
DBGPRINTF3(("FIND1CASE: enter, t==NULL, returning.\n"));
return NULL;
@@ -3043,7 +3067,8 @@ static struct op **find1case(struct op *t, char *w)
T_CMD_NAMES[t->type]));
if (t->type == TLIST) {
- if ((tp = find1case(t->left, w)) != NULL) {
+ tp = find1case(t->left, w);
+ if (tp != NULL) {
DBGPRINTF3(("FIND1CASE: found one to the left, returning tp=%p\n", tp));
return tp;
}
@@ -3051,12 +3076,14 @@ static struct op **find1case(struct op *t, char *w)
} else
t1 = t;
- for (wp = t1->words; *wp;)
- if ((cp = evalstr(*wp++, DOSUB)) && gmatch(w, cp)) {
+ for (wp = t1->words; *wp;) {
+ cp = evalstr(*wp++, DOSUB);
+ if (cp && gmatch(w, cp)) {
DBGPRINTF3(("FIND1CASE: returning &t1->left= %p.\n",
&t1->left));
return &t1->left;
}
+ }
DBGPRINTF(("FIND1CASE: returning NULL\n"));
return NULL;
@@ -3178,11 +3205,13 @@ static char *rexecve(char *c, char **v, char **envp)
while (asis || *sp != '\0') {
asis = 0;
tp = e.linep;
- for (; *sp != '\0'; tp++)
- if ((*tp = *sp++) == ':') {
- asis = *sp == '\0';
+ for (; *sp != '\0'; tp++) {
+ *tp = *sp++;
+ if (*tp == ':') {
+ asis = (*sp == '\0');
break;
}
+ }
if (tp != e.linep)
*tp++ = '/';
for (i = 0; (*tp++ = c[i++]) != '\0';);
@@ -3322,9 +3351,11 @@ static int dochdir(struct op *t)
char *cp, *er;
cp = t->words[1];
- if (cp == NULL && (cp = homedir->value) == NULL)
- er = ": no home directory";
- else if (chdir(cp) < 0)
+ if (cp == NULL) {
+ cp = homedir->value;
+ if (cp == NULL)
+ er = ": no home directory";
+ } else if (chdir(cp) < 0)
er = ": bad directory";
else
return 0;
@@ -3380,6 +3411,7 @@ static int doumask(struct op *t)
putc('0' + ((i >> n) & 07), stderr);
putc('\n', stderr);
} else {
+/* huh??? '8','9' are not allowed! */
for (n = 0; *cp >= '0' && *cp <= '9'; cp++)
n = n * 8 + (*cp - '0');
umask(n);
@@ -3420,9 +3452,8 @@ static int dodot(struct op *t)
if (cp == NULL) {
DBGPRINTF(("DODOT: bad args, ret 0\n"));
return 0;
- } else {
- DBGPRINTF(("DODOT: cp is %s\n", cp));
}
+ DBGPRINTF(("DODOT: cp is %s\n", cp));
sp = any('/', cp) ? ":" : path->value;
@@ -3452,8 +3483,7 @@ static int dodot(struct op *t)
return exstat;
}
-
- } /* While */
+ } /* while */
prs(cp);
err(": not found");
@@ -3490,13 +3520,13 @@ static int doread(struct op *t)
for (wp = t->words + 1; *wp; wp++) {
for (cp = e.linep; !nl && cp < elinep - 1; cp++) {
nb = read(0, cp, sizeof(*cp));
- if (nb != sizeof(*cp) || (nl = (*cp == '\n'))
- || (wp[1] && any(*cp, ifs->value))
- ) {
+ if (nb != sizeof(*cp))
+ break;
+ nl = (*cp == '\n');
+ if (nl || (wp[1] && any(*cp, ifs->value)))
break;
- }
}
- *cp = 0;
+ *cp = '\0';
if (nb <= 0)
break;
setval(lookup(*wp), e.linep);
@@ -3609,7 +3639,8 @@ static int brkcontin(char *cp, int val)
if (nl <= 0)
nl = 999;
do {
- if ((bc = brklist) == NULL)
+ bc = brklist;
+ if (bc == NULL)
break;
brklist = bc->nextlev;
} while (--nl);
@@ -3627,7 +3658,8 @@ static int doexit(struct op *t)
char *cp;
execflg = 0;
- if ((cp = t->words[1]) != NULL)
+ cp = t->words[1];
+ if (cp != NULL)
setstatus(getn(cp));
DBGPRINTF(("DOEXIT: calling leave(), t=%p\n", t));
@@ -3695,8 +3727,8 @@ static int doset(struct op *t)
for (n = 0; (t->words[n] = t->words[n + 1]) != NULL; n++);
if (*++cp == 0)
flag['x'] = flag['v'] = 0;
- else
- for (; *cp; cp++)
+ else {
+ for (; *cp; cp++) {
switch (*cp) {
case 'e':
if (!interactive)
@@ -3708,6 +3740,8 @@ static int doset(struct op *t)
flag[(int) *cp]++;
break;
}
+ }
+ }
setdash();
}
if (t->words[1]) {
@@ -3738,7 +3772,7 @@ static void varput(char *s, int out)
static int dotimes(struct op *t)
{
struct tms buf;
- long int clk_tck = sysconf(_SC_CLK_TCK);
+ long clk_tck = sysconf(_SC_CLK_TCK);
times(&buf);
printf("%dm%fs %dm%fs\n%dm%fs %dm%fs\n",
@@ -3754,7 +3788,7 @@ static int dotimes(struct op *t)
}
-static int (*inbuilt(char *s)) (struct op *) {
+static builtin_func_ptr inbuilt(char *s) {
const struct builtincmd *bp;
for (bp = builtincmds; bp->name != NULL; bp++)
@@ -3874,7 +3908,8 @@ static int expand(char *cp, struct wdblock **wbp, int f)
*wbp = addword(cp, *wbp);
return 1;
}
- if (newenv(setjmp(errpt = ev)) == 0) {
+ errpt = ev;
+ if (newenv(setjmp(errpt)) == 0) {
PUSHIO(aword, cp, strchar);
e.iobase = e.iop;
while ((cp = blank(f)) && gflg == 0) {
@@ -3981,9 +4016,12 @@ static int subgetc(char ec, int quoted)
e.iop->task = XGRAVE;
goto again;
}
- if (c == '$' && (c = dollar(quoted)) == 0) {
- e.iop->task = XDOLL;
- goto again;
+ if (c == '$') {
+ c = dollar(quoted);
+ if (c == 0) {
+ e.iop->task = XDOLL;
+ goto again;
+ }
}
}
return c;
@@ -4051,11 +4089,12 @@ static int dollar(int quoted)
return 0;
} else { /* trap the nasty ${=} */
s[0] = '1';
- s[1] = 0;
+ s[1] = '\0';
}
}
vp = lookup(s);
- if ((dolp = vp->value) == null) {
+ dolp = vp->value;
+ if (dolp == null) {
switch (c) {
case '=':
if (isdigit(*s)) {
@@ -4313,8 +4352,7 @@ static struct wdblock *glob(char *cp, struct wdblock *wb)
else if (!any(*pp & ~QUOTE, spcl))
*pp &= ~QUOTE;
if (i != 0) {
- for (cl = addword(scopy(cp), (struct wdblock *) 0); anyspcl(cl);
- cl = nl) {
+ for (cl = addword(scopy(cp), NULL); anyspcl(cl); cl = nl) {
nl = newword(cl->w_nword * 2);
for (i = 0; i < cl->w_nword; i++) { /* for each argument */
for (pp = cl->w_words[i]; *pp; pp++)
@@ -4374,7 +4412,7 @@ static void globname(char *we, char *pp)
/* XXX Hmmm... What this could be? (abial) */
/*
if (ent[j].d_ino == 0)
- continue;
+ continue;
*/
strncpy(dname, de->d_name, NAME_MAX);
if (dname[0] == '.')
@@ -4409,8 +4447,7 @@ static char *generate(char *start1, char *end1, char *middle, char *end)
char *p;
char *op, *xp;
- p = op =
- space((int) (end1 - start1) + strlen(middle) + strlen(end) + 2);
+ p = op = space((int)(end1 - start1) + strlen(middle) + strlen(end) + 2);
for (xp = start1; xp != end1;)
*op++ = *xp++;
for (xp = middle; (*op++ = *xp++) != '\0';);
@@ -4518,7 +4555,8 @@ static void glob1(char *base, char *lim)
if (i < lptr) {
c = (*func) (i, lptr);
if (c == 0) {
- glob2(i, lptr -= v2);
+ lptr -= v2;
+ glob2(i, lptr);
continue;
}
if (c < 0) {
@@ -4531,13 +4569,15 @@ static void glob1(char *base, char *lim)
if (j > hptr) {
c = (*func) (hptr, j);
if (c == 0) {
- glob2(hptr += v2, j);
+ hptr += v2;
+ glob2(hptr, j);
goto begin;
}
if (c > 0) {
if (i == lptr) {
- glob3(i, hptr += v2, j);
- i = lptr += v2;
+ hptr += v2;
+ glob3(i, hptr, j);
+ i = (lptr += v2);
goto begin;
}
glob2(i, j);
@@ -4561,9 +4601,9 @@ static void glob1(char *base, char *lim)
goto top;
}
-
- glob3(j, lptr -= v2, i);
- j = hptr -= v2;
+ lptr -= v2;
+ glob3(j, lptr, i);
+ j = (hptr -= v2);
}
}
@@ -4651,37 +4691,39 @@ static int readc(void)
if (c != '\0') {
e.iop->peekc = 0;
return c;
- } else {
- if (e.iop->prev != 0) {
- if ((c = (*e.iop->iofn) (e.iop->argp, e.iop)) != '\0') {
- if (c == -1) {
- e.iop++;
- continue;
- }
- if (e.iop == iostack)
- ioecho(c);
- return (e.iop->prev = c);
- } else if (e.iop->task == XIO && e.iop->prev != '\n') {
- e.iop->prev = 0;
- if (e.iop == iostack)
- ioecho('\n');
- return '\n';
+ }
+ if (e.iop->prev != 0) {
+ c = (*e.iop->iofn)(e.iop->argp, e.iop);
+ if (c != '\0') {
+ if (c == -1) {
+ e.iop++;
+ continue;
}
+ if (e.iop == iostack)
+ ioecho(c);
+ e.iop->prev = c;
+ return e.iop->prev;
}
- if (e.iop->task == XIO) {
- if (multiline) {
- return e.iop->prev = 0;
- }
- if (interactive && e.iop == iostack + 1) {
+ if (e.iop->task == XIO && e.iop->prev != '\n') {
+ e.iop->prev = 0;
+ if (e.iop == iostack)
+ ioecho('\n');
+ return '\n';
+ }
+ }
+ if (e.iop->task == XIO) {
+ if (multiline) {
+ e.iop->prev = 0;
+ return e.iop->prev;
+ }
+ if (interactive && e.iop == iostack + 1) {
#if ENABLE_FEATURE_EDITING
- current_prompt = prompt->value;
+ current_prompt = prompt->value;
#else
- prs(prompt->value);
+ prs(prompt->value);
#endif
- }
}
}
-
} /* FOR */
if (e.iop >= iostack) {
@@ -4764,8 +4806,6 @@ static void pushio(struct ioarg *argp, int (*fn) (struct ioarg *))
e.iop->task = XGRAVE;
else
e.iop->task = XOTHER;
-
- return;
}
static struct io *setbase(struct io *ip)
@@ -4790,7 +4830,8 @@ static int nlchar(struct ioarg *ap)
if (ap->aword == NULL)
return 0;
- if ((c = *ap->aword++) == 0) {
+ c = *ap->aword++;
+ if (c == 0) {
ap->aword = NULL;
return '\n';
}
@@ -4891,7 +4932,6 @@ static int filechar(struct ioarg *ap)
lseek(ap->afile, ap->afpos, SEEK_SET);
i = safe_read(ap->afile, bp->buf, sizeof(bp->buf));
-
if (i <= 0) {
closef(ap->afile);
return 0;
@@ -4918,12 +4958,10 @@ static int filechar(struct ioarg *ap)
c = mycommand[position];
position++;
return c;
- } else
-#endif
- {
- i = safe_read(ap->afile, &c, sizeof(c));
- return i == sizeof(c) ? (c & 0x7f) : (closef(ap->afile), 0);
}
+#endif
+ i = safe_read(ap->afile, &c, sizeof(c));
+ return i == sizeof(c) ? (c & 0x7f) : (closef(ap->afile), 0);
}
/*
@@ -4935,10 +4973,9 @@ static int herechar(struct ioarg *ap)
if (read(ap->afile, &c, sizeof(c)) != sizeof(c)) {
close(ap->afile);
- c = 0;
+ c = '\0';
}
return c;
-
}
/*
@@ -5087,7 +5124,7 @@ static void markhere(char *s, struct ioword *iop)
DBGPRINTF7(("MARKHERE: enter, s=%p\n", s));
h = (struct here *) space(sizeof(struct here));
- if (h == 0)
+ if (h == NULL)
return;
h->h_tag = evalstr(s, DOSUB);
@@ -5099,18 +5136,21 @@ static void markhere(char *s, struct ioword *iop)
h->h_next = NULL;
if (inhere == 0)
inhere = h;
- else
- for (lh = inhere; lh != NULL; lh = lh->h_next)
+ else {
+ for (lh = inhere; lh != NULL; lh = lh->h_next) {
if (lh->h_next == 0) {
lh->h_next = h;
break;
}
+ }
+ }
iop->io_flag |= IOHERE | IOXHERE;
- for (s = h->h_tag; *s; s++)
+ for (s = h->h_tag; *s; s++) {
if (*s & QUOTE) {
iop->io_flag &= ~IOXHERE;
*s &= ~QUOTE;
}
+ }
h->h_dosub = iop->io_flag & IOXHERE;
}
@@ -5218,7 +5258,8 @@ static int herein(char *hname, int xdoll)
tf = mkstemp(tname);
if (tf < 0)
return -1;
- if (newenv(setjmp(errpt = ev)) == 0) {
+ errpt = ev;
+ if (newenv(setjmp(errpt)) == 0) {
PUSHIO(afile, hf, herechar);
setbase(e.iop);
while ((c = subgetc(0, 0)) != 0) {
@@ -5232,8 +5273,8 @@ static int herein(char *hname, int xdoll)
tf = open(tname, 0);
unlink(tname);
return tf;
- } else
- return hf;
+ }
+ return hf;
}
static void scraphere(void)
@@ -5270,7 +5311,6 @@ static void freehere(int area)
}
-
/*
* Copyright (c) 1987,1997, Prentice Hall
* All rights reserved.