search for: cmdentry

Displaying 20 results from an estimated 23 matches for "cmdentry".

Did you mean: cmd_entry
2020 Mar 28
0
[klibc:update-dash] dash: eval: Add assignment built-in support again
...t **spp; + argp = cmd->ncmd.args; + if ((osp = fill_arglist(&arglist, &argp))) { + int pseudovarflag = 0; - spp = arglist.lastp; - expandarg(argp, &arglist, EXP_FULL | EXP_TILDE); - for (sp = *spp; sp; sp = sp->next) + for (;;) { + find_command(arglist.list->text, &cmdentry, + cmd_flag | DO_REGBLTIN, pathval()); + + /* implement bltin and command here */ + if (cmdentry.cmdtype != CMDBUILTIN) + break; + + pseudovarflag = cmdentry.u.cmd->flags & BUILTIN_ASSIGN; + if (likely(spclbltin < 0)) { + spclbltin = + cmdentry.u.cmd->flags &a...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Replace with listsetvar with mklocal/setvareq
...le; back_exitstatus = 0; @@ -759,6 +760,8 @@ evalcommand(union node *cmd, int flags) cmd_flag = 0; execcmd = 0; spclbltin = -1; + vflags = 0; + vlocal = 0; path = NULL; argc = 0; @@ -770,6 +773,8 @@ evalcommand(union node *cmd, int flags) find_command(arglist.list->text, &cmdentry, cmd_flag | DO_REGBLTIN, pathval()); + vlocal++; + /* implement bltin and command here */ if (cmdentry.cmdtype != CMDBUILTIN) break; @@ -780,6 +785,7 @@ evalcommand(union node *cmd, int flags) cmdentry.u.cmd->flags & BUILTIN_SPECIAL ; + vlocal =...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Fail immediately with redirections errors for simple command
...+ exitstatus = status; + + /* We have a redirection error. */ + if (spclbltin > 0) + exraise(EXERROR); + + goto out; + } + for (argp = cmd->ncmd.assign; argp; argp = argp->narg.next) { struct strlist **spp; @@ -848,30 +859,19 @@ evalcommand(union node *cmd, int flags) !(cmdentry.u.cmd->flags & BUILTIN_REGULAR)) { find_command(argv[0], &cmdentry, cmd_flag | DO_ERR, unlikely(path) ? path : pathval()); - if (cmdentry.cmdtype == CMDUNKNOWN) { - status = 127; -#ifdef FLUSHERR - flushout(&errout); -#endif - goto bail; - } - } - - if (status) {...
2019 Jan 25
0
[klibc:update-dash] eval: Reap zombies after built-in commands and functions
...dash/jobs.c | 8 +++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 6ba64b12..811c28a4 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -848,6 +848,8 @@ bail: goto out; } + jp = NULL; + /* Execute the command. */ switch (cmdentry.cmdtype) { default: @@ -856,7 +858,6 @@ bail: INTOFF; jp = makejob(cmd, 1); if (forkshell(jp, cmd, FORK_FG) != 0) { - status = waitforjob(jp); INTON; break; } @@ -875,22 +876,22 @@ bail: if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { if (exception == EXERR...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Reap zombies after built-in commands and functions
...dash/jobs.c | 8 +++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index a679ba31..26055493 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -848,6 +848,8 @@ bail: goto out; } + jp = NULL; + /* Execute the command. */ switch (cmdentry.cmdtype) { default: @@ -856,7 +858,6 @@ bail: INTOFF; jp = makejob(cmd, 1); if (forkshell(jp, cmd, FORK_FG) != 0) { - status = waitforjob(jp); INTON; break; } @@ -875,22 +876,22 @@ bail: if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { if (exception == EXERR...
2020 Mar 28
0
[klibc:update-dash] dash: exec: Do not allocate stack string in padvance
...do { - name = padvance(&path, cmdp->cmdname); - stunalloc(name); + padvance(&path, cmdp->cmdname); } while (--idx >= 0); + name = stackblock(); out1str(name); out1fmt(snlfmt, cmdp->rehash ? "*" : nullstr); } @@ -291,6 +290,7 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path) int e; int updatetbl; struct builtincmd *bcmd; + int len; /* If name contains a slash, don't use PATH or hash table */ if (strchr(name, '/') != NULL) { @@ -362,8 +362,8 @@ find_command(char *name, struct cmdentry *entry, int act, const char...
2019 Jan 25
0
[klibc:update-dash] jobs - Do not block when waiting on SIGCHLD
...kshell(jp, cmd, FORK_FG) != 0) { - INTON; + if (forkshell(jp, cmd, FORK_FG) != 0) break; - } FORCEINTON; } listsetvar(varlist.list, VEXPORT|VSTACK); @@ -875,11 +873,8 @@ bail: if (execcmd && argc > 1) listsetvar(varlist.list, VEXPORT); } - if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - if (exception == EXERROR && spclbltin <= 0) { - FORCEINTON; - break; - } + if (evalbltin(cmdentry.u.cmd, argc, argv, flags) && + !(exception == EXERROR && spclbltin <= 0)) { raise: longjmp(handler->loc, 1); } @@...
2020 Mar 28
0
[klibc:update-dash] dash: jobs - Do not block when waiting on SIGCHLD
...kshell(jp, cmd, FORK_FG) != 0) { - INTON; + if (forkshell(jp, cmd, FORK_FG) != 0) break; - } FORCEINTON; } listsetvar(varlist.list, VEXPORT|VSTACK); @@ -875,11 +873,8 @@ bail: if (execcmd && argc > 1) listsetvar(varlist.list, VEXPORT); } - if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - if (exception == EXERROR && spclbltin <= 0) { - FORCEINTON; - break; - } + if (evalbltin(cmdentry.u.cmd, argc, argv, flags) && + !(exception == EXERROR && spclbltin <= 0)) { raise: longjmp(handler->loc, 1); } @@...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Add vfork support
...sh/eval.c +++ b/usr/dash/eval.c @@ -892,10 +892,8 @@ bail: /* Fork off a child process if necessary. */ if (!(flags & EV_EXIT) || have_traps()) { INTOFF; - jp = makejob(cmd, 1); - if (forkshell(jp, cmd, FORK_FG) != 0) - break; - FORCEINTON; + jp = vforkexec(cmd, argv, path, cmdentry.u.index); + break; } shellexec(argv, path, cmdentry.u.index); /* NOTREACHED */ diff --git a/usr/dash/exec.h b/usr/dash/exec.h index 2b318257..423b07e6 100644 --- a/usr/dash/exec.h +++ b/usr/dash/exec.h @@ -58,6 +58,8 @@ struct cmdentry { #define DO_ALTPATH 0x08 /* using alternate path *...
2020 Mar 28
0
[klibc:update-dash] dash: exec: Stricter pathopt parsing
...) cd(1) will always treat % characters as part of the path. 2) chkmail will continue to accept arbitrary pathopt. 3) find_dot_file will ignore the %builtin pathopt instead of trying to do a stat in the accompanying directory (which is usually the current directory). The patch also removes the clearcmdentry optimisation where we attempt to only partially flush the table where possible. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/cd.c | 2 +- usr/dash/exec.c | 133 ++++++++++++++++++++++++++++++++++-----...
2019 Jan 25
0
[klibc:update-dash] [BUILTIN] command: allow combining -p with -v
...by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/exec.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/usr/dash/exec.c b/usr/dash/exec.c index 79e20074..e56e3f67 100644 --- a/usr/dash/exec.c +++ b/usr/dash/exec.c @@ -96,7 +96,7 @@ STATIC void clearcmdentry(int); STATIC struct tblentry *cmdlookup(const char *, int); STATIC void delete_cmd_entry(void); STATIC void addcmdentry(char *, struct cmdentry *); -STATIC int describe_command(struct output *, char *, int); +STATIC int describe_command(struct output *, char *, const char *, int); /* @@ -72...
2020 Mar 28
0
[klibc:update-dash] dash: [BUILTIN] command: allow combining -p with -v
...by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/exec.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/usr/dash/exec.c b/usr/dash/exec.c index 79e20074..e56e3f67 100644 --- a/usr/dash/exec.c +++ b/usr/dash/exec.c @@ -96,7 +96,7 @@ STATIC void clearcmdentry(int); STATIC struct tblentry *cmdlookup(const char *, int); STATIC void delete_cmd_entry(void); STATIC void addcmdentry(char *, struct cmdentry *); -STATIC int describe_command(struct output *, char *, int); +STATIC int describe_command(struct output *, char *, const char *, int); /* @@ -72...
2019 Jan 25
0
[klibc:update-dash] eval: Return status in eval functions
...ode *cmd, int flags, struct backcmd *backcmd) #else @@ -849,7 +856,7 @@ bail: INTOFF; jp = makejob(cmd, 1); if (forkshell(jp, cmd, FORK_FG) != 0) { - exitstatus = waitforjob(jp); + status = waitforjob(jp); INTON; break; } @@ -868,17 +875,19 @@ bail: if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { if (exception == EXERROR && spclbltin <= 0) { FORCEINTON; - break; + goto readstatus; } raise: longjmp(handler->loc, 1); } - break; + goto readstatus; case CMDFUNCTION: poplocalvars(1); if (evalfun(cmdentry.u.func, ar...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Return status in eval functions
...ode *cmd, int flags, struct backcmd *backcmd) #else @@ -849,7 +856,7 @@ bail: INTOFF; jp = makejob(cmd, 1); if (forkshell(jp, cmd, FORK_FG) != 0) { - exitstatus = waitforjob(jp); + status = waitforjob(jp); INTON; break; } @@ -868,17 +875,19 @@ bail: if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { if (exception == EXERROR && spclbltin <= 0) { FORCEINTON; - break; + goto readstatus; } raise: longjmp(handler->loc, 1); } - break; + goto readstatus; case CMDFUNCTION: poplocalvars(1); if (evalfun(cmdentry.u.func, ar...
2019 Jan 25
0
[klibc:update-dash] [ERROR] Set exitstatus in onint
...aise(SIGINT); } + exitstatus = SIGINT + 128; exraise(EXINT); /* NOTREACHED */ } diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 741bf120..501d47fe 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -853,21 +853,15 @@ bail: listsetvar(varlist.list, VEXPORT); } if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - int status; - int i; - - i = exception; - if (i == EXEXIT) - goto raise; - - status = (i == EXINT) ? SIGINT + 128 : 2; - exitstatus = status; - - if (i == EXINT || spclbltin > 0) { -raise: - longjmp(handler->loc, 1); + if (exception == EXER...
2019 Jan 25
0
[klibc:update-dash] [EVAL] Do not clobber exitstatus in evalcommand
...; --- usr/dash/eval.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 501d47fe..b384cb82 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -853,12 +853,9 @@ bail: listsetvar(varlist.list, VEXPORT); } if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - if (exception == EXERROR) { - exitstatus = 2; - if (spclbltin <= 0) { - FORCEINTON; - break; - } + if (exception == EXERROR && spclbltin <= 0) { + FORCEINTON; + break; } raise: longjmp(handler->loc, 1);
2019 Jan 25
0
[klibc:update-dash] eval: Restore input files in evalcommand
...top; struct stackmark smark; union node *argp; @@ -722,6 +723,7 @@ evalcommand(union node *cmd, int flags) TRACE(("evalcommand(0x%lx, %d) called\n", (long)cmd, flags)); setstackmark(&smark); localvar_stop = pushlocalvars(); + file_stop = parsefile; back_exitstatus = 0; cmdentry.cmdtype = CMDBUILTIN; @@ -896,6 +898,7 @@ out: if (cmd->ncmd.redirect) popredir(execcmd); unwindredir(redir_stop); + unwindfiles(file_stop); unwindlocalvars(localvar_stop); if (lastarg) /* dsl: I think this is intended to be used to support diff --git a/usr/dash/input.c b/usr/dash/...
2020 Mar 28
0
[klibc:update-dash] dash: [ERROR] Set exitstatus in onint
...aise(SIGINT); } + exitstatus = SIGINT + 128; exraise(EXINT); /* NOTREACHED */ } diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 578d8919..b3e971bf 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -853,21 +853,15 @@ bail: listsetvar(varlist.list, VEXPORT); } if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - int status; - int i; - - i = exception; - if (i == EXEXIT) - goto raise; - - status = (i == EXINT) ? SIGINT + 128 : 2; - exitstatus = status; - - if (i == EXINT || spclbltin > 0) { -raise: - longjmp(handler->loc, 1); + if (exception == EXER...
2020 Mar 28
0
[klibc:update-dash] dash: [EVAL] Do not clobber exitstatus in evalcommand
...; --- usr/dash/eval.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index b3e971bf..3e08e825 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -853,12 +853,9 @@ bail: listsetvar(varlist.list, VEXPORT); } if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - if (exception == EXERROR) { - exitstatus = 2; - if (spclbltin <= 0) { - FORCEINTON; - break; - } + if (exception == EXERROR && spclbltin <= 0) { + FORCEINTON; + break; } raise: longjmp(handler->loc, 1);
2020 Mar 28
0
[klibc:update-dash] dash: exec: Never rehash regular built-ins
...type == CMDBUILTIN && + !(cmdp->param.cmd->flags & BUILTIN_REGULAR) && + builtinloc > 0))) delete_cmd_entry(); find_command(name, &entry, DO_ERR, pathval()); if (entry.cmdtype == CMDUNKNOWN) @@ -377,7 +379,8 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path) bit = DO_NOFUNC; break; case CMDBUILTIN: - bit = DO_ALTBLTIN; + bit = cmdp->param.cmd->flags & BUILTIN_REGULAR ? + 0 : DO_ALTBLTIN; break; } if (act & bit) { @@ -601,7 +604,9 @@ clearcmdentry(void) pp = tblp; wh...