summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c663
1 files changed, 299 insertions, 364 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 9815321..c1b5841 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -203,7 +203,8 @@ static volatile sig_atomic_t pendingsigs;
#define RESTOREINT(v) \
({ \
xbarrier(); \
- if ((suppressint = (v)) == 0 && intpending) onint(); \
+ suppressint = (v); \
+ if (suppressint == 0 && intpending) onint(); \
0; \
})
#define EXSIGON() \
@@ -1570,7 +1571,8 @@ static int varcmp(const char *, const char *);
static struct var **hashvar(const char *);
-static int varequal(const char *a, const char *b) {
+static int varequal(const char *a, const char *b)
+{
return !varcmp(a, b);
}
@@ -1837,7 +1839,8 @@ static char *stnputs(const char *, size_t, char *);
static char *stputs(const char *, char *);
-static char *_STPUTC(int c, char *p) {
+static char *_STPUTC(int c, char *p)
+{
if (p == sstrend)
p = growstackstr();
*p++ = c;
@@ -2049,7 +2052,6 @@ static int is_safe_applet(char *name)
* This routine is called when an error or an interrupt occurs in an
* interactive shell and control is returned to the main command loop.
*/
-
static void
reset(void)
{
@@ -2176,8 +2178,10 @@ aliascmd(int argc, char **argv)
return 0;
}
while ((n = *++argv) != NULL) {
- if ((v = strchr(n+1, '=')) == NULL) { /* n+1: funny ksh stuff */
- if ((ap = *__lookupalias(n)) == NULL) {
+ v = strchr(n+1, '=');
+ if (v == NULL) { /* n+1: funny ksh stuff */
+ ap = *__lookupalias(n);
+ if (ap == NULL) {
fprintf(stderr, "%s: %s not found\n", "alias", n);
ret = 1;
} else
@@ -2317,7 +2321,7 @@ cdcmd(int argc, char **argv)
goto step7;
if (*dest == '.') {
c = dest[1];
-dotdot:
+ dotdot:
switch (c) {
case '\0':
case '/':
@@ -2330,9 +2334,10 @@ dotdot:
}
if (!*dest)
dest = ".";
- if (!(path = bltinlookup("CDPATH"))) {
-step6:
-step7:
+ path = bltinlookup("CDPATH");
+ if (!path) {
+ step6:
+ step7:
p = dest;
goto docd;
}
@@ -2342,7 +2347,7 @@ step7:
if (stat(p, &statb) >= 0 && S_ISDIR(statb.st_mode)) {
if (c && c != ':')
flags |= CD_PRINT;
-docd:
+ docd:
if (!docd(p, flags))
goto out;
break;
@@ -2350,7 +2355,7 @@ docd:
} while (path);
sh_error("can't cd to %s", dest);
/* NOTREACHED */
-out:
+ out:
if (flags & CD_PRINT)
out1fmt(snlfmt, curdir);
return 0;
@@ -2361,7 +2366,6 @@ out:
* Update curdir (the name of the current directory) in response to a
* cd command.
*/
-
static const char * updatepwd(const char *dir)
{
char *new;
@@ -2418,11 +2422,11 @@ static const char * updatepwd(const char *dir)
return stackblock();
}
+
/*
* Actually do the chdir. We also call hashcd to let the routines in exec.c
* know that the current directory has changed.
*/
-
static int
docd(const char *dest, int flags)
{
@@ -2442,7 +2446,7 @@ docd(const char *dest, int flags)
goto out;
setpwd(dir, 1);
hashcd();
-out:
+ out:
INTON;
return err;
}
@@ -2522,7 +2526,6 @@ static void exverror(int, const char *, va_list) ATTRIBUTE_NORETURN;
* just do a longjmp to the exception handler. The type of exception is
* stored in the global variable "exception".
*/
-
static void
exraise(int e)
{
@@ -2544,7 +2547,6 @@ exraise(int e)
* are held using the INTOFF macro. (The test for iflag is just
* defensive programming.)
*/
-
static void
onint(void) {
int i;
@@ -2626,10 +2628,10 @@ exerror(int cond, const char *msg, ...)
va_end(ap);
}
+
/*
* error/warning routines for external builtins
*/
-
static void
sh_warnx(const char *fmt, ...)
{
@@ -2646,7 +2648,6 @@ sh_warnx(const char *fmt, ...)
* pointer to a static buffer that will be overwritten on the next call.
* Action describes the operation that got the error.
*/
-
static const char *
errmsg(int e, const char *em)
{
@@ -2694,7 +2695,6 @@ static const struct builtincmd bltin = {
/*
* The eval command.
*/
-
static int
evalcmd(int argc, char **argv)
{
@@ -2709,7 +2709,8 @@ evalcmd(int argc, char **argv)
ap = argv + 2;
for (;;) {
concat = stputs(p, concat);
- if ((p = *ap++) == NULL)
+ p = *ap++;
+ if (p == NULL)
break;
STPUTC(' ', concat);
}
@@ -2726,7 +2727,6 @@ evalcmd(int argc, char **argv)
/*
* Execute a command or commands contained in a string.
*/
-
static int
evalstring(char *s, int mask)
{
@@ -2757,7 +2757,6 @@ evalstring(char *s, int mask)
* Evaluate a parse tree. The value is left in the global variable
* exitstatus.
*/
-
static void
evaltree(union node *n, int flags)
{
@@ -2793,7 +2792,7 @@ evaltree(union node *n, int flags)
goto setstatus;
case NCMD:
evalfn = evalcommand;
-checkexit:
+ checkexit:
if (eflag && !(flags & EV_TESTED))
checkexit = ~0;
goto calleval;
@@ -2832,9 +2831,9 @@ checkexit:
break;
if (!evalskip) {
n = n->nbinary.ch2;
-evaln:
+ evaln:
evalfn = evaltree;
-calleval:
+ calleval:
evalfn(n, flags);
break;
}
@@ -2853,20 +2852,20 @@ calleval:
goto success;
case NDEFUN:
defun(n->narg.text, n->narg.next);
-success:
+ success:
status = 0;
-setstatus:
+ setstatus:
exitstatus = status;
break;
}
-out:
+ out:
if ((checkexit & exitstatus))
evalskip |= SKIPEVAL;
else if (pendingsigs && dotrap())
goto exexit;
if (flags & EV_EXIT) {
-exexit:
+ exexit:
exraise(EXEXIT);
}
}
@@ -2891,7 +2890,8 @@ evalloop(union node *n, int flags)
evaltree(n->nbinary.ch1, EV_TESTED);
if (evalskip) {
-skipping: if (evalskip == SKIPCONT && --skipcount <= 0) {
+ skipping:
+ if (evalskip == SKIPCONT && --skipcount <= 0) {
evalskip = 0;
continue;
}
@@ -2949,12 +2949,11 @@ evalfor(union node *n, int flags)
}
}
loopnest--;
-out:
+ out:
popstackmark(&smark);
}
-
static void
evalcase(union node *n, int flags)
{
@@ -2977,7 +2976,7 @@ evalcase(union node *n, int flags)
}
}
}
-out:
+ out:
popstackmark(&smark);
}
@@ -2985,7 +2984,6 @@ out:
/*
* Kick off a subshell to evaluate a tree.
*/
-
static void
evalsubshell(union node *n, int flags)
{
@@ -3019,7 +3017,6 @@ nofork:
/*
* Compute the names of the files in a redirection list.
*/
-
static void
expredir(union node *n)
{
@@ -3059,7 +3056,6 @@ expredir(union node *n)
* of the shell, which make the last process in a pipeline the parent
* of all the rest.)
*/
-
static void
evalpipe(union node *n, int flags)
{
@@ -3121,7 +3117,6 @@ evalpipe(union node *n, int flags)
* we fork off a subprocess and get the output of the command via a pipe.
* Should be called with interrupts off.
*/
-
static void
evalbackcmd(union node *n, struct backcmd *result)
{
@@ -3162,7 +3157,7 @@ evalbackcmd(union node *n, struct backcmd *result)
result->jp = jp;
}
herefd = saveherefd;
-out:
+ out:
TRACE(("evalbackcmd done: fd=%d buf=0x%x nleft=%d jp=0x%x\n",
result->fd, result->buf, result->nleft, result->jp));
}
@@ -3178,7 +3173,8 @@ static char ** parse_command_args(char **argv, const char **path)
return 0;
if (*cp++ != '-')
break;
- if (!(c = *cp++))
+ c = *cp++;
+ if (!c)
break;
if (c == '-' && !*cp) {
argv++;
@@ -3216,7 +3212,6 @@ static const char *expandstr(const char *ps);
/*
* Execute a simple command.
*/
-
static void
evalcommand(union node *cmd, int flags)
{
@@ -3369,7 +3364,7 @@ evalcommand(union node *cmd, int flags)
/* We have a redirection error. */
if (spclbltin > 0)
exraise(EXERROR);
-bail:
+ bail:
exitstatus = status;
goto out;
}
@@ -3423,7 +3418,7 @@ bail:
exitstatus = exit_status;
if (i == EXINT || spclbltin > 0) {
-raise:
+ raise:
longjmp(handler->loc, 1);
}
FORCEINTON;
@@ -3437,7 +3432,7 @@ raise:
break;
}
-out:
+ out:
popredir(cmd_is_exec);
if (lastarg)
/* dsl: I think this is intended to be used to support
@@ -3449,14 +3444,16 @@ out:
}
static int
-evalbltin(const struct builtincmd *cmd, int argc, char **argv) {
+evalbltin(const struct builtincmd *cmd, int argc, char **argv)
+{
char *volatile savecmdname;
struct jmploc *volatile savehandler;
struct jmploc jmploc;
int i;
savecmdname = commandname;
- if ((i = setjmp(jmploc.loc)))
+ i = setjmp(jmploc.loc);
+ if (i)
goto cmddone;
savehandler = handler;
handler = &jmploc;
@@ -3465,7 +3462,7 @@ evalbltin(const struct builtincmd *cmd, int argc, char **argv) {
optptr = NULL; /* initialize nextopt */
exitstatus = (*cmd->builtin)(argc, argv);
flushall();
-cmddone:
+ cmddone:
exitstatus |= ferror(stdout);
clearerr(stdout);
commandname = savecmdname;
@@ -3486,7 +3483,8 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags)
saveparam = shellparam;
savelocalvars = localvars;
- if ((e = setjmp(jmploc.loc))) {
+ e = setjmp(jmploc.loc);
+ if (e) {
goto funcdone;
}
INTOFF;
@@ -3524,13 +3522,13 @@ static int goodname(const char *p)
return !*endofname(p);
}
+
/*
* Search for a command. This is called before we fork so that the
* location of the command will be available in the parent as well as
* the child. The check for "goodname" is an overly conservative
* check that the name will not be subject to expansion.
*/
-
static void
prehash(union node *n)
{
@@ -3550,7 +3548,6 @@ prehash(union node *n)
/*
* No command given.
*/
-
static int
bltincmd(int argc, char **argv)
{
@@ -3593,7 +3590,6 @@ breakcmd(int argc, char **argv)
/*
* The return command.
*/
-
static int
returncmd(int argc, char **argv)
{
@@ -3648,7 +3644,6 @@ execcmd(int argc, char **argv)
#define ARB 1 /* actual size determined at run time */
-
struct tblentry {
struct tblentry *next; /* next entry in hash chain */
union param param; /* definition of builtin function */
@@ -3750,7 +3745,7 @@ tryexec(char *cmd, char **argv, char **envp)
}
#endif
-repeat:
+ repeat:
#ifdef SYSV
do {
execve(cmd, argv, envp);
@@ -3779,7 +3774,6 @@ repeat:
}
-
/*
* Do a path search. The variable path (passed by reference) should be
* set to the start of the path before the first call; padvance will update
@@ -3789,7 +3783,6 @@ repeat:
* pathopt will be set to point to it; otherwise pathopt will be set to
* NULL.
*/
-
static char *
padvance(const char **path, const char *name)
{
@@ -3868,7 +3861,8 @@ hashcmd(int argc, char **argv)
}
c = 0;
while ((name = *argptr) != NULL) {
- if ((cmdp = cmdlookup(name, 0)) != NULL
+ cmdp = cmdlookup(name, 0);
+ if (cmdp != NULL
&& (cmdp->cmdtype == CMDNORMAL
|| (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0)))
delete_cmd_entry();
@@ -3885,7 +3879,6 @@ hashcmd(int argc, char **argv)
* Resolve a command name. If you change this routine, you may have to
* change the shellexec routine as well.
*/
-
static void
find_command(char *name, struct cmdentry *entry, int act, const char *path)
{
@@ -3937,7 +3930,8 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
}
/* If name is in the table, check answer will be ok */
- if ((cmdp = cmdlookup(name, 0)) != NULL) {
+ cmdp = cmdlookup(name, 0);
+ if (cmdp != NULL) {
int bit;
switch (cmdp->cmdtype) {
@@ -3981,7 +3975,7 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
e = ENOENT;
idx = -1;
-loop:
+ loop:
while ((fullname = padvance(&path, name)) != NULL) {
stunalloc(fullname);
idx++;
@@ -4020,8 +4014,8 @@ loop:
if (pathopt) { /* this is a %func directory */
stalloc(strlen(fullname) + 1);
readcmdfile(fullname);
- if ((cmdp = cmdlookup(name, 0)) == NULL ||
- cmdp->cmdtype != CMDFUNCTION)
+ cmdp = cmdlookup(name, 0);
+ if (cmdp == NULL || cmdp->cmdtype != CMDFUNCTION)
sh_error("%s not defined in %s", name, fullname);
stunalloc(fullname);
goto success;
@@ -4048,7 +4042,7 @@ loop:
entry->cmdtype = CMDUNKNOWN;
return;
-builtin_success:
+ builtin_success:
if (!updatetbl) {
entry->cmdtype = CMDBUILTIN;
entry->u.cmd = bcmd;
@@ -4059,7 +4053,7 @@ builtin_success:
cmdp->cmdtype = CMDBUILTIN;
cmdp->param.cmd = bcmd;
INTON;
-success:
+ success:
cmdp->rehash = 0;
entry->cmdtype = cmdp->cmdtype;
entry->u = cmdp->param;
@@ -4074,10 +4068,10 @@ static int pstrcmp(const void *a, const void *b)
return strcmp((const char *) a, (*(const char *const *) b) + 1);
}
+
/*
* Search the table of builtin commands.
*/
-
static struct builtincmd *
find_builtin(const char *name)
{
@@ -4095,7 +4089,6 @@ find_builtin(const char *name)
* Called when a cd is done. Marks all commands so the next time they
* are executed they will be rehashed.
*/
-
static void
hashcd(void)
{
@@ -4121,7 +4114,6 @@ hashcd(void)
* pathval() still returns the old value at this point.
* Called with interrupts off.
*/
-
static void
changepath(const char *newval)
{
@@ -4165,7 +4157,6 @@ changepath(const char *newval)
* Clear out command entries. The argument specifies the first entry in
* PATH which has changed.
*/
-
static void
clearcmdentry(int firstchange)
{
@@ -4193,7 +4184,6 @@ clearcmdentry(int firstchange)
}
-
/*
* Locate a command in the command hash table. If "add" is nonzero,
* add the command to the table if it is not already present. The
@@ -4203,10 +4193,8 @@ clearcmdentry(int firstchange)
*
* Interrupts must be off if called with add != 0.
*/
-
static struct tblentry **lastcmdentry;
-
static struct tblentry *
cmdlookup(const char *name, int add)
{
@@ -4237,10 +4225,10 @@ cmdlookup(const char *name, int add)
return cmdp;
}
+
/*
* Delete the command entry returned on the last lookup.
*/
-
static void
delete_cmd_entry(void)
{
@@ -4260,7 +4248,6 @@ delete_cmd_entry(void)
* Add a new command entry, replacing any existing command entry for
* the same name - except special builtins.
*/
-
static void addcmdentry(char *name, struct cmdentry *entry)
{
struct tblentry *cmdp;
@@ -4274,10 +4261,10 @@ static void addcmdentry(char *name, struct cmdentry *entry)
cmdp->rehash = 0;
}
+
/*
* Make a copy of a parse tree.
*/
-
static struct funcnode * copyfunc(union node *n)
{
struct funcnode *f;
@@ -4295,10 +4282,10 @@ static struct funcnode * copyfunc(union node *n)
return f;
}
+
/*
* Define a shell function.
*/
-
static void
defun(char *name, union node *func)
{
@@ -4315,7 +4302,6 @@ defun(char *name, union node *func)
/*
* Delete a function if it exists.
*/
-
static void
unsetfunc(const char *name)
{
@@ -4329,8 +4315,6 @@ unsetfunc(const char *name)
/*
* Locate and print what a word is...
*/
-
-
#if ENABLE_ASH_CMDCMD
static int
describe_command(char *command, int describe_command_verbose)
@@ -4359,7 +4343,8 @@ describe_command(char *command)
#if ENABLE_ASH_ALIAS
/* Then look at the aliases */
- if ((ap = lookupalias(command, 0)) != NULL) {
+ ap = lookupalias(command, 0);
+ if (ap != NULL) {
if (describe_command_verbose) {
out1fmt(" is an alias for %s", ap->val);
} else {
@@ -4371,7 +4356,8 @@ describe_command(char *command)
}
#endif
/* Then check if it is a tracked alias */
- if ((cmdp = cmdlookup(command, 0)) != NULL) {
+ cmdp = cmdlookup(command, 0);
+ if (cmdp != NULL) {
entry.cmdtype = cmdp->cmdtype;
entry.u = cmdp->param;
} else {
@@ -4426,8 +4412,7 @@ describe_command(char *command)
}
return 127;
}
-
-out:
+ out:
outstr("\n", stdout);
return 0;
}
@@ -4543,7 +4528,8 @@ static void varunset(const char *, const char *, const char *, int)
* Returns an stalloced string.
*/
-static char * preglob(const char *pattern, int quoted, int flag) {
+static char * preglob(const char *pattern, int quoted, int flag)
+{
flag |= RMESCAPE_GLOB;
if (quoted) {
flag |= RMESCAPE_QUOTED;
@@ -4581,8 +4567,7 @@ static void expandhere(union node *arg, int fd)
* perform splitting and file name expansion. When arglist is NULL, perform
* here document expansion.
*/
-
-void
+static void
expandarg(union node *arg, struct arglist *arglist, int flag)
{
struct strlist *sp;
@@ -4631,7 +4616,6 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
* characters to allow for further processing. Otherwise treat
* $@ like $* since no splitting will be performed.
*/
-
static void
argstr(char *p, int flag)
{
@@ -4668,14 +4652,14 @@ argstr(char *p, int flag)
char *q;
flag &= ~EXP_TILDE;
-tilde:
+ tilde:
q = p;
if (*q == CTLESC && (flag & EXP_QWORD))
q++;
if (*q == '~')
p = exptilde(p, q, flag);
}
-start:
+ start:
startloc = expdest - (char *)stackblock();
for (;;) {
length += strcspn(p + length, reject);
@@ -4739,7 +4723,7 @@ start:
goto start;
}
inquotes = !inquotes;
-addquote:
+ addquote:
if (quotes) {
p--;
length++;
@@ -4767,7 +4751,7 @@ addquote:
#endif
}
}
-breakloop:
+ breakloop:
;
}
@@ -4798,12 +4782,13 @@ exptilde(char *startp, char *p, int flag)
goto done;
}
}
-done:
+ done:
*p = '\0';
if (*name == '\0') {
home = lookupvar(homestr);
} else {
- if ((pw = getpwnam(name)) == NULL)
+ pw = getpwnam(name);
+ if (pw == NULL)
goto lose;
home = pw->pw_dir;
}
@@ -4814,7 +4799,7 @@ done:
strtodest(home, SQSYNTAX, quotes);
recordregion(startloc, expdest - (char *)stackblock(), 0);
return p;
-lose:
+ lose:
*p = c;
return startp;
}
@@ -4922,10 +4907,10 @@ expari(int quotes)
}
#endif
+
/*
* Expand stuff in backwards quotes.
*/
-
static void
expbackq(union node *cmd, int quoted, int quotes)
{
@@ -4952,7 +4937,7 @@ expbackq(union node *cmd, int quoted, int quotes)
goto read;
for (;;) {
memtodest(p, i, syntax, quotes);
-read:
+ read:
if (in.fd < 0)
break;
i = safe_read(in.fd, buf, sizeof(buf));
@@ -5146,7 +5131,7 @@ evalvar(char *p, int flag)
startloc = expdest - (char *)stackblock();
p = strchr(p, '=') + 1;
-again:
+ again:
varlen = varvalue(var, varflags, flag);
if (varflags & VSNUL)
varlen--;
@@ -5157,7 +5142,7 @@ again:
}
if (subtype == VSMINUS) {
-vsplus:
+ vsplus:
if (varlen < 0) {
argstr(
p, flag | EXP_TILDE |
@@ -5199,7 +5184,7 @@ vsplus:
if (subtype == VSNORMAL) {
if (!easy)
goto end;
-record:
+ record:
recordregion(startloc, expdest - (char *)stackblock(), quoted);
goto end;
}
@@ -5235,11 +5220,12 @@ record:
goto record;
}
-end:
+ end:
if (subtype != VSNORMAL) { /* skip to end of alternative */
int nesting = 1;
for (;;) {
- if ((c = *p++) == CTLESC)
+ c = *p++;
+ if (c == CTLESC)
p++;
else if (c == CTLBACKQ || c == (CTLBACKQ|CTLQUOTE)) {
if (varlen >= 0)
@@ -5260,7 +5246,6 @@ end:
/*
* Put a string on the stack.
*/
-
static void
memtodest(const char *p, size_t len, int syntax, int quotes) {
char *q = expdest;
@@ -5290,7 +5275,6 @@ strtodest(const char *p, int syntax, int quotes)
/*
* Add the value of a specialized variable to the stack string.
*/
-
static ssize_t
varvalue(char *name, int varflags, int flags)
{
@@ -5324,7 +5308,7 @@ varvalue(char *name, int varflags, int flags)
num = backgndpid;
if (num == 0)
return -1;
-numvar:
+ numvar:
len = cvtnum(num);
break;
case '-':
@@ -5345,8 +5329,9 @@ numvar:
sep = ifsset() ? SC2INT(ifsval()[0]) : ' ';
if (quotes && (SIT(sep, syntax) == CCTL || SIT(sep, syntax) == CBACK))
sepq = 1;
-param:
- if (!(ap = shellparam.p))
+ param:
+ ap = shellparam.p;
+ if (!ap)
return -1;
while ((p = *ap++)) {
size_t partlen;
@@ -5389,7 +5374,7 @@ param:
goto value;
default:
p = lookupvar(name);
-value:
+ value:
if (!p)
return -1;
@@ -5409,7 +5394,6 @@ value:
* Record the fact that we have to scan this region of the
* string for IFS characters.
*/
-
static void
recordregion(int start, int end, int nulonly)
{
@@ -5513,7 +5497,7 @@ ifsbreakup(char *string, struct arglist *arglist)
if (!*start)
return;
-add:
+ add:
sp = (struct strlist *)stalloc(sizeof(*sp));
sp->text = start;
*arglist->lastp = sp;
@@ -5580,7 +5564,7 @@ expandmeta(struct strlist *str, int flag)
/*
* no matches
*/
-nometa:
+ nometa:
*exparg.lastp = str;
rmescapes(str->text);
exparg.lastp = &str->next;
@@ -5595,10 +5579,10 @@ nometa:
}
}
+
/*
* Add a file name to the list.
*/
-
static void
addfname(const char *name)
{
@@ -5614,7 +5598,6 @@ addfname(const char *name)
/*
* Do metacharacter (i.e. *, ?, [...]) expansion.
*/
-
static void
expmeta(char *enddir, char *name)
{
@@ -5656,7 +5639,7 @@ expmeta(char *enddir, char *name)
start = p + 1;
}
}
-out:
+ out:
if (metaflag == 0) { /* we've reached the end of the file name */
if (enddir != expdir)
metaflag++;
@@ -5687,7 +5670,8 @@ out:
cp = expdir;
enddir[-1] = '\0';
}
- if ((dirp = opendir(cp)) == NULL)
+ dirp = opendir(cp);
+ if (dirp == NULL)
return;
if (enddir != expdir)
enddir[-1] = '/';
@@ -5723,12 +5707,12 @@ out:
endname[-1] = '/';
}
+
/*
* Sort the results of file name expansion. It calculates the number of
* strings to sort and then calls msort (short for merge sort) to do the
* work.
*/
-
static struct strlist *
expsort(struct strlist *str)
{
@@ -5771,14 +5755,16 @@ msort(struct strlist *list, int len)
{
*lpp = p;
lpp = &p->next;
- if ((p = *lpp) == NULL) {
+ p = *lpp;
+ if (p == NULL) {
*lpp = q;
break;
}
} else {
*lpp = q;
lpp = &q->next;
- if ((q = *lpp) == NULL) {
+ q = *lpp;
+ if (q == NULL) {
*lpp = p;
break;
}
@@ -5791,7 +5777,6 @@ msort(struct strlist *list, int len)
/*
* Returns true if the pattern matches the string.
*/
-
static int patmatch(char *pattern, const char *string)
{
return pmatch(preglob(pattern, 0, 0), string);
@@ -5801,7 +5786,6 @@ static int patmatch(char *pattern, const char *string)
/*
* Remove any CTLESC characters from a string.
*/
-
static char *
_rmescapes(char *str, int flag)
{
@@ -5855,7 +5839,7 @@ _rmescapes(char *str, int flag)
}
}
notescaped = globbing;
-copy:
+ copy:
*q++ = *p++;
}
*q = '\0';
@@ -5870,8 +5854,7 @@ copy:
/*
* See if a pattern matches in a case statement.
*/
-
-int
+static int
casematch(union node *pattern, char *val)
{
struct stackmark smark;
@@ -5888,10 +5871,10 @@ casematch(union node *pattern, char *val)
return result;
}
+
/*
* Our own itoa().
*/
-
static int
cvtnum(arith_t num)
{
@@ -6043,7 +6026,7 @@ static int preadfd(void)
char *buf = parsefile->buf;
parsenextc = buf;
-retry:
+ retry:
#if ENABLE_FEATURE_EDITING
if (!iflag || parsefile->fd)
nr = safe_read(parsefile->fd, buf, BUFSIZ - 1);
@@ -6095,8 +6078,7 @@ retry:
* 3) If the is more stuff in this buffer, use it else call read to fill it.
* 4) Process input up to the next newline, deleting nul characters.
*/
-
-int
+static int
preadbuffer(void)
{
char *q;
@@ -6120,8 +6102,9 @@ preadbuffer(void)
more = parselleft;
if (more <= 0) {
-again:
- if ((more = preadfd()) <= 0) {
+ again:
+ more = preadfd();
+ if (more <= 0) {
parselleft = parsenleft = EOF_NLEFT;
return PEOF;
}
@@ -6171,8 +6154,7 @@ again:
* Undo the last call to pgetc. Only one character may be pushed back.
* PEOF may be pushed back.
*/
-
-void
+static void
pungetc(void)
{
parsenleft++;
@@ -6183,7 +6165,7 @@ pungetc(void)
* Push a string back onto the input at this current parsefile level.
* We handle aliases this way.
*/
-void
+static void
pushstring(char *s, void *ap)
{
struct strpush *sp;
@@ -6212,7 +6194,7 @@ pushstring(char *s, void *ap)
INTON;
}
-void
+static void
popstring(void)
{
struct strpush *sp = parsefile->strpush;
@@ -6241,11 +6223,11 @@ popstring(void)
INTON;
}
+
/*
* Set the input to take input from a file. If push is set, push the
* old input onto the stack first.
*/
-
static int
setinputfile(const char *fname, int flags)
{
@@ -6253,7 +6235,8 @@ setinputfile(const char *fname, int flags)
int fd2;
INTOFF;
- if ((fd = open(fname, O_RDONLY)) < 0) {
+ fd = open(fname, O_RDONLY);
+ if (fd < 0) {
if (flags & INPUT_NOFILE_OK)
goto out;
sh_error("Can't open %s", fname);
@@ -6266,7 +6249,7 @@ setinputfile(const char *fname, int flags)
fd = fd2;
}
setinputfd(fd, flags & INPUT_PUSH_FILE);
-out:
+ out:
INTON;
return fd;
}
@@ -6276,7 +6259,6 @@ out:
* Like setinputfile, but takes an open file descriptor. Call this with
* interrupts off.
*/
-
static void
setinputfd(int fd, int push)
{
@@ -6296,7 +6278,6 @@ setinputfd(int fd, int push)
/*
* Like setinputfile, but takes input from a string.
*/
-
static void
setinputstring(char *string)
{
@@ -6314,7 +6295,6 @@ setinputstring(char *string)
* To handle the "." command, a stack of input files is used. Pushfile
* adds a new entry to the stack and popfile restores the previous level.
*/
-
static void
pushfile(void)
{
@@ -6358,7 +6338,6 @@ popfile(void)
/*
* Return to top level.
*/
-
static void
popallfiles(void)
{
@@ -6371,7 +6350,6 @@ popallfiles(void)
* Close the file(s) that the shell is reading commands from. Called
* after a fork is done.
*/
-
static void
closescript(void)
{
@@ -6484,8 +6462,7 @@ set_curjob(struct job *jp, unsigned mode)
*
* Called with interrupts off.
*/
-
-void
+static void
setjobctl(int on)
{
int fd;
@@ -6511,8 +6488,9 @@ setjobctl(int on)
goto out;
fcntl(fd, F_SETFD, FD_CLOEXEC);
do { /* while we are in the background */
- if ((pgrp = tcgetpgrp(fd)) < 0) {
-out:
+ pgrp = tcgetpgrp(fd);
+ if (pgrp < 0) {
+ out:
sh_warnx("can't access tty; job control turned off");
mflag = on = 0;
goto close;
@@ -6538,7 +6516,7 @@ out:
setsignal(SIGTSTP);
setsignal(SIGTTOU);
setsignal(SIGTTIN);
-close:
+ close:
close(fd);
fd = -1;
}
@@ -6556,7 +6534,7 @@ killcmd(int argc, char **argv)
struct job *jp;
if (argc <= 1) {
-usage:
+ usage:
sh_error(
"Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or\n"
"kill -l [exitstatus]"
@@ -6697,7 +6675,7 @@ restartjob(struct job *jp, int mode)
ps->status = -1;
}
} while (ps++, --i);
-out:
+ out:
status = (mode == FORK_FG) ? waitforjob(jp) : 0;
INTON;
return status;
@@ -6738,8 +6716,7 @@ sprint_status(char *s, int status, int sigonly)
else
col = fmtstr(s, 16, "Done");
}
-
-out:
+ out:
return col;
}
@@ -6791,8 +6768,7 @@ showjob(FILE *out, struct job *jp, int mode)
do {
/* for each process */
col = fmtstr(s, 48, " |\n%*c%d ", indent, ' ', ps->pid) - 3;
-
-start:
+ start:
fprintf(out, "%s%*c%s",
s, 33 - col >= 0 ? 33 - col : 0, ' ', ps->cmd
);
@@ -6845,7 +6821,6 @@ jobscmd(int argc, char **argv)
* Print a list of jobs. If "change" is nonzero, only print jobs whose
* statuses have changed since the last call to showjobs.
*/
-
static void
showjobs(FILE *out, int mode)
{
@@ -6864,10 +6839,10 @@ showjobs(FILE *out, int mode)
}
#endif /* JOBS */
+
/*
* Mark a job structure as unused.
*/
-
static void
freejob(struct job *jp)
{
@@ -6928,7 +6903,7 @@ waitcmd(int argc, char **argv)
if (job->ps[job->nprocs - 1].pid == pid)
break;
job = job->prev_job;
-start:
+ start:
if (!job)
goto repeat;
} while (1);
@@ -6939,11 +6914,11 @@ start:
dowait(DOWAIT_BLOCK, 0);
job->waited = 1;
retval = getstatus(job);
-repeat:
+ repeat:
;
} while (*++argv);
-out:
+ out:
return retval;
}
@@ -6951,7 +6926,6 @@ out:
/*
* Convert a job name to a job structure.
*/
-
static struct job *
getjob(const char *name, int getctl)
{
@@ -6977,14 +6951,14 @@ getjob(const char *name, int getctl)
if (!p[1]) {
if (c == '+' || c == '%') {
-currentjob:
+ currentjob:
err_msg = "No current job";
goto check;
} else if (c == '-') {
if (jp)
jp = jp->prev_job;
err_msg = "No previous job";
-check:
+ check:
if (!jp)
goto err;
goto gotit;
@@ -7020,14 +6994,14 @@ check:
jp = jp->prev_job;
}
-gotit:
+ gotit:
#if JOBS
err_msg = "job %s not created under job control";
if (getctl && jp->jobctl == 0)
goto err;
#endif
return jp;
-err:
+ err:
sh_error(err_msg, name);
}
@@ -7136,7 +7110,6 @@ growjobtab(void)
*
* Called with interrupts off.
*/
-
static void forkchild(struct job *jp, union node *n, int mode)
{
int oldlvl;
@@ -7240,6 +7213,7 @@ forkshell(struct job *jp, union node *n, int mode)
return pid;
}
+
/*
* Wait for job to finish.
*
@@ -7260,8 +7234,7 @@ forkshell(struct job *jp, union node *n, int mode)
*
* Called with interrupts off.
*/
-
-int
+static int
waitforjob(struct job *jp)
{
int st;
@@ -7320,7 +7293,6 @@ waitforjob(struct job *jp)
* (as opposed to running a builtin command or just typing return),
* and the jobs command may give out of date information.
*/
-
static int waitproc(int block, int *status)
{
int flags = 0;
@@ -7334,10 +7306,10 @@ static int waitproc(int block, int *status)
return wait3(status, flags, (struct rusage *)NULL);
}
+
/*
* Wait for a process to terminate.
*/
-
static int
dowait(int block, struct job *job)
{
@@ -7391,7 +7363,7 @@ dowait(int block, struct job *job)
jobless--;
goto out;
-gotjob:
+ gotjob:
if (state != JOBRUNNING) {
thisjob->changed = 1;
@@ -7407,7 +7379,7 @@ gotjob:
}
}
-out:
+ out:
INTON;
if (thisjob && thisjob == job) {
@@ -7428,7 +7400,6 @@ out:
/*
* return 1 if there are stopped jobs, otherwise 0
*/
-
int
stoppedjobs(void)
{
@@ -7453,7 +7424,6 @@ out:
* Return a string identifying a command (to be printed by the
* jobs command).
*/
-
#if JOBS
static char *cmdnextc;
@@ -7503,7 +7473,7 @@ cmdtxt(union node *n)
goto binop;
case NOR:
p = " || ";
-binop:
+ binop:
cmdtxt(n->nbinary.ch1);
cmdputs(p);
n = n->nbinary.ch2;
@@ -7515,7 +7485,7 @@ binop:
case NNOT:
cmdputs("!");
n = n->nnot.com;
-donode:
+ donode:
cmdtxt(n);
break;
case NIF:
@@ -7540,14 +7510,14 @@ donode:
goto until;
case NUNTIL:
p = "until ";
-until:
+ until:
cmdputs(p);
cmdtxt(n->nbinary.ch1);
n = n->nbinary.ch2;
p = "; done";
-dodo:
+ dodo:
cmdputs("; do ");
-dotail:
+ dotail:
cmdtxt(n);
goto dotail2;
case NFOR:
@@ -7568,7 +7538,7 @@ dotail:
break;
case NARG:
p = n->narg.text;
-dotail2:
+ dotail2:
cmdputs(p);
break;
case NHERE:
@@ -7607,7 +7577,7 @@ dotail2:
goto redir;
case NFROMTO:
p = "<>";
-redir:
+ redir:
s[0] = n->nfile.fd + '0';
s[1] = '\0';
cmdputs(s);
@@ -7714,10 +7684,10 @@ cmdputs(const char *s)
break;
}
USTPUTC(c, nextc);
-checkstr:
+ checkstr:
if (!str)
continue;
-dostr:
+ dostr:
while ((c = *str++)) {
USTPUTC(c, nextc);
}
@@ -7793,14 +7763,12 @@ static time_t mailtime[MAXMBOXES];
static int mail_var_path_changed;
-
/*
* Print appropriate message(s) if mail has arrived.
* If mail_var_path_changed is set,
* then the value of MAIL has mail_var_path_changed,
* so we just update the values.
*/
-
static void
chkmail(void)
{
@@ -7869,7 +7837,6 @@ static void read_profile(const char *);
* exception occurs. When an exception occurs the variable "state"
* is used to figure out how far we had gotten.
*/
-
int ash_main(int argc, char **argv);
int ash_main(int argc, char **argv)
{
@@ -7949,11 +7916,11 @@ int ash_main(int argc, char **argv)
if (isloginsh) {
state = 1;
read_profile("/etc/profile");
-state1:
+ state1:
state = 2;
read_profile(".profile");
}
-state2:
+ state2:
state = 3;
if (
#ifndef linux
@@ -7961,11 +7928,12 @@ state2:
#endif
iflag
) {
- if ((shinit = lookupvar("ENV")) != NULL && *shinit != '\0') {
+ shinit = lookupvar("ENV");
+ if (shinit != NULL && *shinit != '\0') {
read_profile(shinit);
}
}
-state3:
+ state3:
state = 4;
if (minusc)
evalstring(minusc, 0);
@@ -8000,7 +7968,6 @@ state3:
* Read and execute commands. "Top" is nonzero for the top level command
* loop; it turns on prompting if the shell is interactive.
*/
-
static int
cmdloop(int top)
{
@@ -8057,7 +8024,6 @@ cmdloop(int top)
/*
* Read /etc/profile or .profile. Return on error.
*/
-
static void
read_profile(const char *name)
{
@@ -8077,7 +8043,6 @@ read_profile(const char *name)
/*
* Read a file containing shell functions.
*/
-
static void
readcmdfile(char *name)
{
@@ -8091,7 +8056,6 @@ readcmdfile(char *name)
* Take commands from a file. To be compatible we should do a path
* search for the file, which is necessary to find sub-commands.
*/
-
static char * find_dot_file(char *name)
{
char *fullname;
@@ -8186,7 +8150,6 @@ testcmd(int argc, char **argv)
/*
* Same for malloc, realloc, but returns an error when out of space.
*/
-
static pointer
ckrealloc(pointer p, size_t nbytes)
{
@@ -8205,7 +8168,6 @@ ckmalloc(size_t nbytes)
/*
* Make a copy of a string in safe storage.
*/
-
static char *
savestr(const char *s)
{
@@ -8224,8 +8186,6 @@ savestr(const char *s)
* The size 504 was chosen because the Ultrix malloc handles that size
* well.
*/
-
-
static pointer
stalloc(size_t nbytes)
{
@@ -8260,7 +8220,7 @@ stalloc(size_t nbytes)
}
-void
+static void
stunalloc(pointer p)
{
#if DEBUG
@@ -8274,7 +8234,7 @@ stunalloc(pointer p)
}
-void
+static void
setstackmark(struct stackmark *mark)
{
mark->stackp = stackp;
@@ -8285,7 +8245,7 @@ setstackmark(struct stackmark *mark)
}
-void
+static void
popstackmark(struct stackmark *mark)
{
struct stack_block *sp;
@@ -8313,8 +8273,7 @@ popstackmark(struct stackmark *mark)
* possibly moving it (like realloc). Grabstackblock actually allocates the
* part of the block that has been used.
*/
-
-void
+static void
growstackblock(void)
{
size_t newlen;
@@ -8374,6 +8333,7 @@ static void grabstackblock(size_t len)
stacknleft -= len;
}
+
/*
* The following routines are somewhat easier to use than the above.
* The user declares a variable of type STACKSTR, which may be declared
@@ -8391,8 +8351,7 @@ static void grabstackblock(size_t len)
* CHECKSTACKSPACE can be called before USTPUTC to ensure that there
* is space for at least one character.
*/
-
-void *
+static void *
growstackstr(void)
{
size_t len = stackblocksize();
@@ -8407,8 +8366,7 @@ growstackstr(void)
/*
* Called from CHECKSTRSPACE.
*/
-
-char *
+static char *
makestrspace(size_t newlen, char *p)
{
size_t len = p - stacknxt;
@@ -8426,7 +8384,7 @@ makestrspace(size_t newlen, char *p)
return stackblock() + len;
}
-char *
+static char *
stnputs(const char *s, size_t n, char *p)
{
p = makestrspace(n, p);
@@ -8434,7 +8392,7 @@ stnputs(const char *s, size_t n, char *p)
return p;
}
-char *
+static char *
stputs(const char *s, char *p)
{
return stnputs(s, strlen(s), p);
@@ -8452,8 +8410,7 @@ stputs(const char *s, char *p)
/*
* prefix -- see if pfx is a prefix of string.
*/
-
-char *
+static char *
prefix(const char *string, const char *pfx)
{
while (*pfx) {
@@ -8468,11 +8425,9 @@ prefix(const char *string, const char *pfx)
* Convert a string of digits to an integer, printing an error message on
* failure.
*/
-
-int
+static int
number(const char *s)
{
-
if (! is_number(s))
sh_error(illnum, s);
return atoi(s);
@@ -8482,8 +8437,7 @@ number(const char *s)
/*
* Check for a valid number. This should be elsewhere.
*/
-
-int
+static int
is_number(const char *p)
{
do {
@@ -8498,9 +8452,9 @@ is_number(const char *p)
* Produce a possibly single quoted string suitable as input to the shell.
* The return string is allocated on the stack.
*/
-
-char *
-single_quote(const char *s) {
+static char *
+single_quote(const char *s)
+{
char *p;
STARTSTACKSTR(p);
@@ -8539,11 +8493,11 @@ single_quote(const char *s) {
return stackblock();
}
+
/*
* Like strdup but works with the ash stack.
*/
-
-char *
+static char *
sstrdup(const char *p)
{
size_t len = strlen(p) + 1;
@@ -8764,7 +8718,6 @@ nodesavestr(char *s)
/*
* Free a parse tree.
*/
-
static void
freefunc(struct funcnode *f)
{
@@ -8780,8 +8733,7 @@ static void setoption(int, int);
/*
* Process the shell command line arguments.
*/
-
-void
+static void
procargs(int argc, char **argv)
{
int i;
@@ -8820,7 +8772,7 @@ procargs(int argc, char **argv)
goto setarg0;
} else if (!sflag) {
setinputfile(*xargv, 0);
-setarg0:
+ setarg0:
arg0 = *xargv++;
commandname = arg0;
}
@@ -8839,7 +8791,7 @@ setarg0:
}
-void
+static void
optschanged(void)
{
#if DEBUG
@@ -8869,11 +8821,11 @@ static void minus_o(char *name, int val)
}
}
+
/*
* Process shell options. The global variable argptr contains a pointer
* to the argument list; we advance it past the options.
*/
-
static void
options(int cmdline)
{
@@ -8885,7 +8837,8 @@ options(int cmdline)
minusc = NULL;
while ((p = *argptr) != NULL) {
argptr++;
- if ((c = *p++) == '-') {
+ c = *p++;
+ if (c == '-') {
val = 1;
if (p[0] == '\0' || LONE_DASH(p)) {
if (!cmdline) {
@@ -8941,8 +8894,7 @@ setoption(int flag, int val)
/*
* Set the shell parameters.
*/
-
-void
+static void
setparam(char **argv)
{
char **newparam;
@@ -8969,8 +8921,7 @@ setparam(char **argv)
/*
* Free the list of positional parameters.
*/
-
-void
+static void
freeparam(volatile struct shparam *param)
{
char **ap;
@@ -8986,8 +8937,7 @@ freeparam(volatile struct shparam *param)
/*
* The shift builtin command.
*/
-
-int
+static int
shiftcmd(int argc, char **argv)
{
int n;
@@ -9018,8 +8968,7 @@ shiftcmd(int argc, char **argv)
/*
* The set command builtin.
*/
-
-int
+static int
setcmd(int argc, char **argv)
{
if (argc == 1)
@@ -9103,7 +9052,7 @@ getopts(char *optstr, char *optvar, char **optfirst, int *param_optind, int *opt
/* Current word is done, advance */
p = *optnext;
if (p == NULL || *p != '-' || *++p == '\0') {
-atend:
+ atend:
p = NULL;
done = 1;
goto out;
@@ -9152,8 +9101,7 @@ atend:
p = NULL;
} else
err |= setvarsafe("OPTARG", nullstr, 0);
-
-out:
+ out:
*optoff = p ? p - *(optnext - 1) : -1;
*param_optind = optnext - optfirst + 1;
fmtstr(s, sizeof(s), "%d", *param_optind);
@@ -9170,14 +9118,14 @@ out:
return done;
}
+
/*
* The getopts builtin. Shellparam.optnext points to the next argument
* to be processed. Shellparam.optptr points to the next character to
* be processed in the current argument. If shellparam.optnext is NULL,
* then it's the first time getopts has been called.
*/
-
-int
+static int
getoptscmd(int argc, char **argv)
{
char **optbase;
@@ -9190,8 +9138,7 @@ getoptscmd(int argc, char **argv)
shellparam.optind = 1;
shellparam.optoff = -1;
}
- }
- else {
+ } else {
optbase = &argv[3];
if (shellparam.optind > argc - 2) {
shellparam.optind = 1;
@@ -9214,7 +9161,6 @@ getoptscmd(int argc, char **argv)
* other arguments are unnecessary. It return the character, or '\0' on
* end of input.
*/
-
static int
nextopt(const char *optstring)
{
@@ -9222,7 +9168,8 @@ nextopt(const char *optstring)
const char *q;
char c;
- if ((p = optptr) == NULL || *p == '\0') {
+ p = optptr;
+ if (p == NULL || *p == '\0') {
p = *argptr;
if (p == NULL || *p != '-' || *++p == '\0')
return '\0';
@@ -9250,7 +9197,7 @@ nextopt(const char *optstring)
/* output.c */
-void
+static void
outstr(const char *p, FILE *file)
{
INTOFF;
@@ -9258,7 +9205,7 @@ outstr(const char *p, FILE *file)
INTON;
}
-void
+static void
flushall(void)
{
INTOFF;
@@ -9267,7 +9214,7 @@ flushall(void)
INTON;
}
-void
+static void
flusherr(void)
{
INTOFF;
@@ -9300,7 +9247,7 @@ out1fmt(const char *fmt, ...)
}
-int
+static int
fmtstr(char *outbuf, size_t length, const char *fmt, ...)
{
va_list ap;
@@ -9359,7 +9306,6 @@ static void setprompt(int);
* Read and parse a command. Returns NEOF on end of file. (NULL is a
* valid parse tree indicating a blank line.)
*/
-
union node *
parsecmd(int interact)
{
@@ -9408,8 +9354,7 @@ list(int nlflag)
}
if (n1 == NULL) {
n1 = n2;
- }
- else {
+ } else {
n3 = (union node *)stalloc(sizeof(struct nbinary));
n3->type = NSEMI;
n3->nbinary.ch1 = n1;
@@ -9457,7 +9402,8 @@ andor(void)
n1 = pipeline();
for (;;) {
- if ((t = readtoken()) == TAND) {
+ t = readtoken();
+ if (t == TAND) {
t = NAND;
} else if (t == TOR) {
t = NOR;
@@ -9633,7 +9579,7 @@ command(void)
if (lasttoken != TIN)
synexpect(TIN);
cpp = &n1->ncase.cases;
-next_case:
+ next_case:
checkkwd = CHKNL | CHKKWD;
t = readtoken();
while (t != TESAC) {
@@ -9660,7 +9606,8 @@ next_case:
cpp = &cp->nclist.next;
checkkwd = CHKNL | CHKKWD;
- if ((t = readtoken()) != TESAC) {
+ t = readtoken();
+ if (t != TESAC) {
if (t != TENDCASE)
synexpect(TENDCASE);
else
@@ -9689,7 +9636,7 @@ next_case:
if (readtoken() != t)
synexpect(t);
-redir:
+ redir:
/* Now check for redirection which may follow command */
checkkwd = CHKKWD | CHKALIAS;
rpp = rpp2;
@@ -9709,7 +9656,6 @@ redir:
}
n1->nredir.redirect = redir;
}
-
return n1;
}
@@ -9782,7 +9728,7 @@ simplecmd(void) {
goto out;
}
}
-out:
+ out:
*app = NULL;
*vpp = NULL;
*rpp = NULL;
@@ -9807,7 +9753,7 @@ makename(void)
return n;
}
-void fixredir(union node *n, const char *text, int err)
+static void fixredir(union node *n, const char *text, int err)
{
TRACE(("Fix redir %s %d\n", text, err));
if (!err)
@@ -9842,7 +9788,7 @@ parsefname(void)
if (quoteflag == 0)
n->type = NXHERE;
TRACE(("Here document %d\n", n->type));
- if (! noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN)
+ if (!noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN)
synerror("Illegal eof marker for << redirection");
rmescapes(wordtext);
here->eofmark = wordtext;
@@ -9850,7 +9796,7 @@ parsefname(void)
if (heredoclist == NULL)
heredoclist = here;
else {
- for (p = heredoclist ; p->next ; p = p->next);
+ for (p = heredoclist; p->next; p = p->next);
p->next = here;
}
} else if (n->type == NTOFD || n->type == NFROMFD) {
@@ -9864,7 +9810,6 @@ parsefname(void)
/*
* Input any here documents.
*/
-
static void
parseheredoc(void)
{
@@ -9908,7 +9853,7 @@ readtoken(void)
#endif
#if ENABLE_ASH_ALIAS
-top:
+ top:
#endif
t = xxreadtoken();
@@ -9933,7 +9878,8 @@ top:
if (checkkwd & CHKKWD) {
const char *const *pp;
- if ((pp = findkwd(wordtext))) {
+ pp = findkwd(wordtext);
+ if (pp) {
lasttoken = t = pp - tokname_array;
TRACE(("keyword %s recognized\n", tokname(t)));
goto out;
@@ -9943,7 +9889,8 @@ top:
if (checkkwd & CHKALIAS) {
#if ENABLE_ASH_ALIAS
struct alias *ap;
- if ((ap = lookupalias(wordtext, 1)) != NULL) {
+ ap = lookupalias(wordtext, 1);
+ if (ap != NULL) {
if (*ap->val) {
pushstring(ap->val, ap);
}
@@ -9951,7 +9898,7 @@ top:
}
#endif
}
-out:
+ out:
checkkwd = 0;
#if DEBUG
if (!alreadyseen)
@@ -10054,11 +10001,10 @@ static int xxreadtoken(void)
}
}
}
-
return lasttoken = xxreadtoken_tokens[p - xxreadtoken_chars];
}
}
- }
+ } /* for */
}
@@ -10128,7 +10074,7 @@ xxreadtoken(void)
goto breakloop;
}
}
-breakloop:
+ breakloop:
return readtoken1(c, BASESYNTAX, (char *)NULL, 0);
#undef RETURN
}
@@ -10372,7 +10318,6 @@ readtoken1(int firstc, int syntax, char *eofmark, int striptabs)
* is called, c is set to the first character of the next input line. If
* we are at the end of the here document, this routine sets the c to PEOF.
*/
-
checkend: {
if (eofmark) {
#if ENABLE_ASH_ALIAS
@@ -10410,7 +10355,6 @@ checkend: {
* specifying the fd to be redirected. The variable "c" contains the
* first character of the redirection operator.
*/
-
parseredir: {
char fd = *out;
union node *np;
@@ -10431,7 +10375,8 @@ parseredir: {
}
} else { /* c == '<' */
np->nfile.fd = 0;
- switch (c = pgetc()) {
+ c = pgetc();
+ switch (c) {
case '<':
if (sizeof(struct nfile) != sizeof(struct nhere)) {
np = (union node *)stalloc(sizeof(struct nhere));
@@ -10440,7 +10385,8 @@ parseredir: {
np->type = NHERE;
heredoc = (struct heredoc *)stalloc(sizeof(struct heredoc));
heredoc->here = np;
- if ((c = pgetc()) == '-') {
+ c = pgetc();
+ if (c == '-') {
heredoc->striptabs = 1;
} else {
heredoc->striptabs = 0;
@@ -10473,7 +10419,6 @@ parseredir: {
* Parse a substitution. At this point, we have read the dollar sign
* and nothing else.
*/
-
parsesub: {
int subtype;
int typeloc;
@@ -10507,12 +10452,12 @@ parsesub: {
if (c == '{') {
c = pgetc();
if (c == '#') {
- if ((c = pgetc()) == '}')
+ c = pgetc();
+ if (c == '}')
c = '#';
else
subtype = VSLENGTH;
- }
- else
+ } else
subtype = 0;
}
if (c > PEOA_OR_PEOF && is_name(c)) {
@@ -10582,7 +10527,6 @@ parsesub: {
* list of commands (passed by reference), and savelen is the number of
* characters on the top of the stack which must be preserved.
*/
-
parsebackq: {
struct nodelist **nlpp;
int savepbq;
@@ -10629,12 +10573,14 @@ parsebackq: {
if (needprompt) {
setprompt(2);
}
- switch (pc = pgetc()) {
+ pc = pgetc();
+ switch (pc) {
case '`':
goto done;
case '\\':
- if ((pc = pgetc()) == '\n') {
+ pc = pgetc();
+ if (pc == '\n') {
plinno++;
if (doprompt)
setprompt(2);
@@ -10671,7 +10617,7 @@ parsebackq: {
}
STPUTC(pc, pout);
}
-done:
+ done:
STPUTC('\0', pout);
psavelen = pout - (char *)stackblock();
if (psavelen > 0) {
@@ -10763,7 +10709,6 @@ parsearith: {
* Returns true if the text contains nothing to expand (no dollar signs
* or backquotes).
*/
-
static int
noexpand(char *text)
{
@@ -10787,7 +10732,6 @@ noexpand(char *text)
* Return of a legal variable name (a letter or underscore followed by zero or
* more letters, underscores, and digits).
*/
-
static char *
endofname(const char *name)
{
@@ -10809,7 +10753,6 @@ endofname(const char *name)
* is the token that is expected, or -1 if more than one type of token can
* occur at this point.
*/
-
static void synexpect(int token)
{
char msg[64];
@@ -10834,7 +10777,6 @@ synerror(const char *msg)
* called by editline -- any expansions to the prompt
* should be added here.
*/
-
#if ENABLE_ASH_EXPAND_PRMT
static const char *
expandstr(const char *ps)
@@ -10963,12 +10905,12 @@ static int noclobberopen(const char *fname)
return -1;
}
+
/*
* Handle here documents. Normally we fork off a process to write the
* data to a pipe. If the document is short, we can stuff the data in
* the pipe without forking.
*/
-
static int openhere(union node *redir)
{
int pip[2];
@@ -10998,7 +10940,7 @@ static int openhere(union node *redir)
expandhere(redir->nhere.doc, pip[1]);
_exit(0);
}
-out:
+ out:
close(pip[1]);
return pip[0];
}
@@ -11012,31 +10954,36 @@ openredirect(union node *redir)
switch (redir->nfile.type) {
case NFROM:
fname = redir->nfile.expfname;
- if ((f = open(fname, O_RDONLY)) < 0)
+ f = open(fname, O_RDONLY);
+ if (f < 0)
goto eopen;
break;
case NFROMTO:
fname = redir->nfile.expfname;
- if ((f = open(fname, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
+ f = open(fname, O_RDWR|O_CREAT|O_TRUNC, 0666);
+ if (f < 0)
goto ecreate;
break;
case NTO:
/* Take care of noclobber mode. */
if (Cflag) {
fname = redir->nfile.expfname;
- if ((f = noclobberopen(fname)) < 0)
+ f = noclobberopen(fname);
+ if (f < 0)
goto ecreate;
break;
}
/* FALLTHROUGH */
case NCLOBBER:
fname = redir->nfile.expfname;
- if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
+ f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ if (f < 0)
goto ecreate;
break;
case NAPPEND:
fname = redir->nfile.expfname;
- if ((f = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0666)) < 0)
+ f = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0666);
+ if (f < 0)
goto ecreate;
break;
default:
@@ -11055,9 +11002,9 @@ openredirect(union node *redir)
}
return f;
-ecreate:
+ ecreate:
sh_error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
-eopen:
+ eopen:
sh_error("cannot open %s: %s", fname, errmsg(errno, E_OPEN));
}
@@ -11078,6 +11025,7 @@ static void dupredirect(union node *redir, int f)
}
}
+
/*
* Process a list of redirection commands. If the REDIR_PUSH flag is set,
* old file descriptors are stashed away so that the redirection can be
@@ -11085,7 +11033,6 @@ static void dupredirect(union node *redir, int f)
* standard output, and the standard error if it becomes a duplicate of
* stdout, is saved in memory.
*/
-
static void
redirect(union node *redir, int flags)
{
@@ -11151,8 +11098,7 @@ redirect(union node *redir, int flags)
/*
* Undo the effects of the last redirection.
*/
-
-void
+static void
popredir(int drop)
{
struct redirtab *rp;
@@ -11184,8 +11130,7 @@ popredir(int drop)
/*
* Discard all saved file descriptors.
*/
-
-void
+static void
clearredir(int drop)
{
for (;;) {
@@ -11202,8 +11147,7 @@ clearredir(int drop)
* if the source file descriptor is closed, EMPTY if there are no unused
* file descriptors left.
*/
-
-int
+static int
copyfd(int from, int to)
{
int newfd;
@@ -11219,7 +11163,7 @@ copyfd(int from, int to)
}
-int
+static int
redirectsafe(union node *redir, int flags)
{
int err;
@@ -11228,7 +11172,8 @@ redirectsafe(union node *redir, int flags)
struct jmploc jmploc;
SAVEINT(saveint);
- if (!(err = setjmp(jmploc.loc) * 2)) {
+ err = setjmp(jmploc.loc) * 2;
+ if (!err) {
handler = &jmploc;
redirect(redir, flags);
}
@@ -11249,7 +11194,7 @@ static void indent(int, char *, FILE *);
static void trstring(char *);
-void
+static void
showtree(union node *n)
{
trputs("showtree called\n");
@@ -11276,7 +11221,7 @@ shtree(union node *n, int ind, char *pfx, FILE *fp)
goto binop;
case NOR:
s = " || ";
-binop:
+ binop:
shtree(n->nbinary.ch1, ind, NULL, fp);
/* if (ind < 0) */
fputs(s, fp);
@@ -11450,10 +11395,10 @@ indent(int amount, char *pfx, FILE *fp)
*/
-FILE *tracefile;
+static FILE *tracefile;
-void
+static void
trputc(int c)
{
if (debug != 1)
@@ -11461,7 +11406,7 @@ trputc(int c)
putc(c, tracefile);
}
-void
+static void
trace(const char *fmt, ...)
{
va_list va;
@@ -11473,7 +11418,7 @@ trace(const char *fmt, ...)
va_end(va);
}
-void
+static void
tracev(const char *fmt, va_list va)
{
if (debug != 1)
@@ -11482,7 +11427,7 @@ tracev(const char *fmt, va_list va)
}
-void
+static void
trputs(const char *s)
{
if (debug != 1)
@@ -11512,7 +11457,7 @@ trstring(char *s)
case CTLVAR+CTLQUOTE: c = 'V'; goto backslash;
case CTLBACKQ: c = 'q'; goto backslash;
case CTLBACKQ+CTLQUOTE: c = 'Q'; goto backslash;
-backslash: putc('\\', tracefile);
+ backslash: putc('\\', tracefile);
putc(c, tracefile);
break;
default:
@@ -11531,7 +11476,7 @@ backslash: putc('\\', tracefile);
}
-void
+static void
trargs(char **ap)
{
if (debug != 1)
@@ -11546,7 +11491,7 @@ trargs(char **ap)
}
-void
+static void
opentrace(void)
{
char s[100];
@@ -11568,14 +11513,16 @@ opentrace(void)
return;
}
} else {
- if ((tracefile = fopen(s, "a")) == NULL) {
+ tracefile = fopen(s, "a");
+ if (tracefile == NULL) {
fprintf(stderr, "Can't open %s\n", s);
debug = 0;
return;
}
}
#ifdef O_APPEND
- if ((flags = fcntl(fileno(tracefile), F_GETFL, 0)) >= 0)
+ flags = fcntl(fileno(tracefile), F_GETFL, 0);
+ if (flags >= 0)
fcntl(fileno(tracefile), F_SETFL, flags | O_APPEND);
#endif
setlinebuf(tracefile);
@@ -11602,8 +11549,7 @@ opentrace(void)
/*
* The trap builtin.
*/
-
-int
+static int
trapcmd(int argc, char **argv)
{
char *action;
@@ -11629,7 +11575,8 @@ trapcmd(int argc, char **argv)
else
action = *ap++;
while (*ap) {
- if ((signo = get_signum(*ap)) < 0)
+ signo = get_signum(*ap);
+ if (signo < 0)
sh_error("%s: bad trap", *ap);
INTOFF;
if (action) {
@@ -11653,8 +11600,7 @@ trapcmd(int argc, char **argv)
/*
* Clear traps on a fork.
*/
-
-void
+static void
clear_traps(void)
{
char **tp;
@@ -11676,15 +11622,15 @@ clear_traps(void)
* Set the signal handler for the specified signal. The routine figures
* out what it should be set to.
*/
-
-void
+static void
setsignal(int signo)
{
int action;
char *t, tsig;
struct sigaction act;
- if ((t = trap[signo]) == NULL)
+ t = trap[signo];
+ if (t == NULL)
action = S_DFL;
else if (*t != '\0')
action = S_CATCH;
@@ -11759,11 +11705,11 @@ setsignal(int signo)
sigaction(signo, &act, 0);
}
+
/*
* Ignore a signal.
*/
-
-void
+static void
ignoresig(int signo)
{
if (sigmode[signo - 1] != S_IGN && sigmode[signo - 1] != S_HARD_IGN) {
@@ -11776,8 +11722,7 @@ ignoresig(int signo)
/*
* Signal handler.
*/
-
-void
+static void
onsig(int signo)
{
gotsig[signo - 1] = 1;
@@ -11795,8 +11740,7 @@ onsig(int signo)
* Called to execute a trap. Perhaps we should avoid entering new trap
* handlers while we are executing a trap handler.
*/
-
-int
+static int
dotrap(void)
{
char *p;
@@ -11830,8 +11774,7 @@ dotrap(void)
/*
* Controls whether the shell is interactive or not.
*/
-
-void
+static void
setinteractive(int on)
{
static int is_interactive;
@@ -11889,11 +11832,11 @@ static int helpcmd(int argc, char **argv)
}
#endif /* FEATURE_SH_EXTRA_QUIET */
+
/*
* Called to exit the shell.
*/
-
-void
+static void
exitshell(void)
{
struct jmploc loc;
@@ -11912,12 +11855,13 @@ exitshell(void)
goto out;
}
handler = &loc;
- if ((p = trap[0])) {
+ p = trap[0];
+ if (p) {
trap[0] = NULL;
evalstring(p, 0);
}
flushall();
-out:
+ out:
setjobctl(0);
_exit(status);
/* NOTREACHED */
@@ -11939,8 +11883,7 @@ static struct var **findvar(struct var **, const char *);
/*
* Safe version of setvar, returns 1 on success 0 on failure.
*/
-
-int
+static int
setvarsafe(const char *name, const char *val, int flags)
{
int err;
@@ -11962,11 +11905,11 @@ setvarsafe(const char *name, const char *val, int flags)
}
#endif
+
/*
* Set the value of a variable. The flags argument is ored with the
* flags of the variable. If val is NULL, the variable is unset.
*/
-
static void
setvar(const char *name, const char *val, int flags)
{
@@ -12006,8 +11949,7 @@ setvar(const char *name, const char *val, int flags)
* will go away.
* Called with interrupts off.
*/
-
-void
+static void
setvareq(char *s, int flags)
{
struct var *vp, **vpp;
@@ -12054,7 +11996,6 @@ setvareq(char *s, int flags)
/*
* Process a linked list of variable assignments.
*/
-
static void
listsetvar(struct strlist *list_set_var, int flags)
{
@@ -12073,13 +12014,13 @@ listsetvar(struct strlist *list_set_var, int flags)
/*
* Find the value of a variable. Returns NULL if not set.
*/
-
static char *
lookupvar(const char *name)
{
struct var *v;
- if ((v = *findvar(hashvar(name), name))) {
+ v = *findvar(hashvar(name), name);
+ if (v) {
#ifdef DYNAMIC_VAR
/*
* Dynamic variables are implemented roughly the same way they are
@@ -12101,7 +12042,6 @@ lookupvar(const char *name)
/*
* Search the environment of a builtin command.
*/
-
static char *
bltinlookup(const char *name)
{
@@ -12118,7 +12058,6 @@ bltinlookup(const char *name)
/*
* Generate a list of variables satisfying the given conditions.
*/
-
static char **
listvars(int on, int off, char ***end)
{
@@ -12154,7 +12093,6 @@ listvars(int on, int off, char ***end)
* instead of hashed lists.
* For now just roll 'em through qsort for printing...
*/
-
static int
showvars(const char *sep_prefix, int on, int off)
{
@@ -12185,7 +12123,6 @@ showvars(const char *sep_prefix, int on, int off)
/*
* The export and readonly commands.
*/
-
static int
exportcmd(int argc, char **argv)
{
@@ -12199,10 +12136,12 @@ exportcmd(int argc, char **argv)
notp = nextopt("p") - 'p';
if (notp && ((name = *(aptr = argptr)))) {
do {
- if ((p = strchr(name, '=')) != NULL) {
+ p = strchr(name, '=');
+ if (p != NULL) {
p++;
} else {
- if ((vp = *findvar(hashvar(name), name))) {
+ vp = *findvar(hashvar(name), name);
+ if (vp) {
vp->flags |= flag;
continue;
}
@@ -12222,7 +12161,6 @@ exportcmd(int argc, char **argv)
* will be restored when the shell function returns. We handle the name
* "-" as a special case.
*/
-
static void mklocal(char *name)
{
struct localvar *lvp;
@@ -12263,10 +12201,10 @@ static void mklocal(char *name)
INTON;
}
+
/*
* The "local" command.
*/
-
static int
localcmd(int argc, char **argv)
{
@@ -12284,7 +12222,6 @@ localcmd(int argc, char **argv)
* Called after a function returns.
* Interrupts must be off.
*/
-
static void
poplocalvars(void)
{
@@ -12319,8 +12256,7 @@ poplocalvars(void)
* variable to allow a function to be unset when there is a readonly variable
* with the same name.
*/
-
-int
+static int
unsetcmd(int argc, char **argv)
{
char **ap;
@@ -12349,8 +12285,7 @@ unsetcmd(int argc, char **argv)
/*
* Unset the specified variable.
*/
-
-int
+static int
unsetvar(const char *s)
{
struct var **vpp;
@@ -12385,8 +12320,7 @@ unsetvar(const char *s)
ok:
retval = 0;
}
-
-out:
+ out:
return retval;
}
@@ -12394,7 +12328,6 @@ out:
/*
* Find the appropriate entry in the hash table from the name.
*/
-
static struct var **
hashvar(const char *p)
{
@@ -12412,8 +12345,7 @@ hashvar(const char *p)
* string must be terminated by '='; the second may be terminated by
* either '=' or '\0'.
*/
-
-int
+static int
varcmp(const char *p, const char *q)
{
int c, d;
@@ -12428,7 +12360,7 @@ varcmp(const char *p, const char *q)
c = 0;
if (d == '=')
d = 0;
-out:
+ out:
return c - d;
}
@@ -12513,7 +12445,6 @@ dash_arith(const char *s)
*
* Copyright (C) 2003 Vladimir Oleynik <dzo@simtreas.ru>
*/
-
static int
letcmd(int argc, char **argv)
{
@@ -12550,7 +12481,6 @@ typedef enum __rlimit_resource rlim_t;
*
* This uses unbuffered input, which may be avoidable in some cases.
*/
-
static int
readcmd(int argc, char **argv)
{
@@ -12639,9 +12569,11 @@ readcmd(int argc, char **argv)
if (prompt && isatty(0)) {
out2str(prompt);
}
- if (*(ap = argptr) == NULL)
+ ap = argptr;
+ if (*ap == NULL)
sh_error("arg count");
- if ((ifs = bltinlookup("IFS")) == NULL)
+ ifs = bltinlookup("IFS");
+ if (ifs == NULL)
ifs = defifs;
#if ENABLE_ASH_READ_NCHARS
if (nch_flag || silent) {
@@ -12712,7 +12644,7 @@ readcmd(int argc, char **argv)
startword = 1;
STARTSTACKSTR(p);
} else {
-put:
+ put:
STPUTC(c, p);
}
}
@@ -12756,7 +12688,8 @@ static int umaskcmd(int argc, char **argv)
umask(mask);
INTON;
- if ((ap = *argptr) == NULL) {
+ ap = *argptr;
+ if (ap == NULL) {
if (symbolic_mode) {
char buf[18];
char *p = buf;
@@ -13465,7 +13398,8 @@ static arith_t arith(const char *expr, int *perrcode)
*perrcode = errcode = 0;
while (1) {
- if ((arithval = *expr) == 0) {
+ arithval = *expr;
+ if (arithval == 0) {
if (p == endexpression) {
/* Null expression. */
return 0;
@@ -13503,7 +13437,8 @@ static arith_t arith(const char *expr, int *perrcode)
/* Skip whitespace */
goto prologue;
}
- if ((p = endofname(expr)) != expr) {
+ p = endofname(expr);
+ if (p != expr) {
size_t var_name_size = (p-expr) + 1; /* trailing zero */
numstackptr->var = alloca(var_name_size);