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...