Displaying 20 results from an estimated 21 matches for "exp_full".
Did you mean:
bexpfull
2019 Jan 25
0
[klibc:update-dash] expand: Fixed "$@" expansion when EXP_FULL is false
...77604985dadef38bdaf251e3898a0b2ef33ea08e
Author: Herbert Xu <herbert at gondor.apana.org.au>
AuthorDate: Thu, 1 Jan 2015 07:53:10 +1100
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Fri, 25 Jan 2019 02:57:21 +0000
[klibc] expand: Fixed "$@" expansion when EXP_FULL is false
The commit 3c06acdac0b1ba0e0acdda513a57ee6e31385dce ([EXPAND]
Split unquoted $@/$* correctly when IFS is set but empty) broke
the case where $@ is in quotes and EXP_FULL is false.
In that case we should still emit IFS as field splitting is not
performed.
Reported-by: Juergen Daubert <...
2020 Mar 28
0
[klibc:update-dash] dash: expand: Fixed "$@" expansion when EXP_FULL is false
...169d4f22009725f47645ca6a4501f2475f
Author: Herbert Xu <herbert at gondor.apana.org.au>
AuthorDate: Thu, 1 Jan 2015 07:53:10 +1100
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Sat, 28 Mar 2020 21:42:54 +0000
[klibc] dash: expand: Fixed "$@" expansion when EXP_FULL is false
[ dash commit bc4d989af4a4069f70f19fbe41a7d7ad61965ff8 ]
The commit 3c06acdac0b1ba0e0acdda513a57ee6e31385dce ([EXPAND]
Split unquoted $@/$* correctly when IFS is set but empty) broke
the case where $@ is in quotes and EXP_FULL is false.
In that case we should still emit IFS as field spl...
2019 Jan 25
0
[klibc:update-dash] expand: Fix ghost fields with unquoted $@/$*
...dp)
char sepc;
char **ap;
char const *syntax;
- int quoted = *quotedp;
int subtype = varflags & VSTYPE;
int discard = subtype == VSPLUS || subtype == VSLENGTH;
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
+ char c;
sep = (flags & EXP_FULL) << CHAR_BIT;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
@@ -928,12 +929,25 @@ numvar:
goto param;
/* fall through */
case '*':
- if (quoted)
- sep = 0;
- sep |= ifsset() ? ifsval()[0] : ' ';
+ /* We will set c to 0 or ~0 depending on whether
+ * we're doin...
2020 Mar 28
0
[klibc:update-dash] dash: expand: Fix ghost fields with unquoted $@/$*
...dp)
char sepc;
char **ap;
char const *syntax;
- int quoted = *quotedp;
int subtype = varflags & VSTYPE;
int discard = subtype == VSPLUS || subtype == VSLENGTH;
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
+ char c;
sep = (flags & EXP_FULL) << CHAR_BIT;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
@@ -928,12 +929,25 @@ numvar:
goto param;
/* fall through */
case '*':
- if (quoted)
- sep = 0;
- sep |= ifsset() ? ifsval()[0] : ' ';
+ /* We will set c to 0 or ~0 depending on whether
+ * we're doin...
2019 Jan 25
0
[klibc:update-dash] [EXPAND] Optimise nulonly away and just use quoted as before
...st *syntax;
- int quoted = flags & EXP_QUOTED;
+ int quoted = *quotedp;
int subtype = varflags & VSTYPE;
int discard = subtype == VSPLUS || subtype == VSLENGTH;
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
- sep = *nulonly ? (flags & EXP_FULL) << CHAR_BIT : 0;
- *nulonly = 0;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
switch (*name) {
@@ -935,16 +931,20 @@ numvar:
expdest = p;
break;
case '@':
+ sep = 0;
if (quoted)
goto param;
/* fall through */
case '*':
- sep |= ifsset() ? ifsval()[0] :...
2020 Mar 28
0
[klibc:update-dash] dash: [EXPAND] Optimise nulonly away and just use quoted as before
...st *syntax;
- int quoted = flags & EXP_QUOTED;
+ int quoted = *quotedp;
int subtype = varflags & VSTYPE;
int discard = subtype == VSPLUS || subtype == VSLENGTH;
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
- sep = *nulonly ? (flags & EXP_FULL) << CHAR_BIT : 0;
- *nulonly = 0;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
switch (*name) {
@@ -935,16 +931,20 @@ numvar:
expdest = p;
break;
case '@':
+ sep = 0;
if (quoted)
goto param;
/* fall through */
case '*':
- sep |= ifsset() ? ifsval()[0] :...
2019 Jan 25
0
[klibc:update-dash] [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty
...varflags, int flags)
+varvalue(char *name, int varflags, int flags, int *nulonly)
{
int num;
char *p;
@@ -907,7 +909,8 @@ varvalue(char *name, int varflags, int flags)
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
- sep = quoted ? ((flags & EXP_FULL) << CHAR_BIT) : 0;
+ sep = *nulonly ? (flags & EXP_FULL) << CHAR_BIT : 0;
+ *nulonly = 0;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
switch (*name) {
@@ -938,15 +941,16 @@ numvar:
expdest = p;
break;
case '@':
- if (sep)
+ if (quoted)
goto param;
/* fall...
2020 Mar 28
0
[klibc:update-dash] dash: [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty
...varflags, int flags)
+varvalue(char *name, int varflags, int flags, int *nulonly)
{
int num;
char *p;
@@ -907,7 +909,8 @@ varvalue(char *name, int varflags, int flags)
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
- sep = quoted ? ((flags & EXP_FULL) << CHAR_BIT) : 0;
+ sep = *nulonly ? (flags & EXP_FULL) << CHAR_BIT : 0;
+ *nulonly = 0;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
switch (*name) {
@@ -938,15 +941,16 @@ numvar:
expdest = p;
break;
case '@':
- if (sep)
+ if (quoted)
goto param;
/* fall...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Add assignment built-in support again
...gt;jp));
}
-static char **
-parse_command_args(char **argv, const char **path)
+static struct strlist *fill_arglist(struct arglist *arglist,
+ union node **argpp)
{
+ struct strlist **lastp = arglist->lastp;
+ union node *argp;
+
+ while ((argp = *argpp)) {
+ expandarg(argp, arglist, EXP_FULL | EXP_TILDE);
+ *argpp = argp->narg.next;
+ if (*lastp)
+ break;
+ }
+
+ return *lastp;
+}
+
+static int parse_command_args(struct arglist *arglist, union node **argpp,
+ const char **path)
+{
+ struct strlist *sp = arglist->list;
char *cp, c;
for (;;) {
- cp = *++argv;
-...
2020 Mar 28
0
[klibc:update-dash] dash: expand: Merge syntax/quotes in memtodest with flags
...--------------
usr/dash/expand.h | 1 +
2 files changed, 18 insertions(+), 25 deletions(-)
diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index f1f5a9fa..a764881e 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -86,8 +86,6 @@
/* Add CTLESC when necessary. */
#define QUOTES_ESC (EXP_FULL | EXP_CASE)
-/* Do not skip NUL characters. */
-#define QUOTES_KEEPNUL EXP_TILDE
/*
* Structure specifying which parts of the string should be searched
@@ -117,8 +115,8 @@ STATIC char *exptilde(char *, char *, int);
STATIC void expbackq(union node *, int);
STATIC const char *subevalvar(char...
2019 Jan 25
0
[klibc:update-dash] parser: Add syntax stack for recursive parsing
...ions(+), 85 deletions(-)
diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index e86bd29d..2c29ea44 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -85,7 +85,7 @@
#define RMESCAPE_HEAP 0x10 /* Malloc strings instead of stalloc */
/* Add CTLESC when necessary. */
-#define QUOTES_ESC (EXP_FULL | EXP_CASE | EXP_QPAT)
+#define QUOTES_ESC (EXP_FULL | EXP_CASE)
/* Do not skip NUL characters. */
#define QUOTES_KEEPNUL EXP_TILDE
@@ -335,16 +335,6 @@ addquote:
case CTLESC:
startloc++;
length++;
-
- /*
- * Quoted parameter expansion pattern: remove quote
- * unless inside...
2020 Mar 28
0
[klibc:update-dash] dash: parser: Add syntax stack for recursive parsing
...ions(+), 85 deletions(-)
diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index e86bd29d..2c29ea44 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -85,7 +85,7 @@
#define RMESCAPE_HEAP 0x10 /* Malloc strings instead of stalloc */
/* Add CTLESC when necessary. */
-#define QUOTES_ESC (EXP_FULL | EXP_CASE | EXP_QPAT)
+#define QUOTES_ESC (EXP_FULL | EXP_CASE)
/* Do not skip NUL characters. */
#define QUOTES_KEEPNUL EXP_TILDE
@@ -335,16 +335,6 @@ addquote:
case CTLESC:
startloc++;
length++;
-
- /*
- * Quoted parameter expansion pattern: remove quote
- * unless inside...
2019 Jan 25
0
[klibc:update-dash] [EVAL] Move common skipcount logic into skiploop
...ing;
- }
+ skip = skiploop();
+ } while (!(skip & ~SKIPCONT));
loopnest--;
exitstatus = status;
}
@@ -392,9 +409,6 @@ evalfor(union node *n, int flags)
arglist.lastp = &arglist.list;
for (argp = n->nfor.args ; argp ; argp = argp->narg.next) {
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE);
- /* XXX */
- if (evalskip)
- goto out;
}
*arglist.lastp = NULL;
@@ -404,18 +418,10 @@ evalfor(union node *n, int flags)
for (sp = arglist.list ; sp ; sp = sp->next) {
setvar(n->nfor.var, sp->text, 0);
evaltree(n->nfor.body, flags);
- if (evalskip) {
-...
2020 Mar 28
0
[klibc:update-dash] dash: eval: Use the correct expansion mode for fd redirection
...ion(+), 1 deletion(-)
diff --git a/usr/dash/eval.c b/usr/dash/eval.c
index dc0c9fa2..4981f156 100644
--- a/usr/dash/eval.c
+++ b/usr/dash/eval.c
@@ -529,7 +529,7 @@ expredir(union node *n)
case NFROMFD:
case NTOFD:
if (redir->ndup.vname) {
- expandarg(redir->ndup.vname, &fn, EXP_FULL | EXP_TILDE);
+ expandarg(redir->ndup.vname, &fn, EXP_TILDE | EXP_REDIR);
fixredir(redir, fn.list->text, 1);
}
break;
2020 Mar 28
0
[klibc:update-dash] dash: [EVAL] Move common skipcount logic into skiploop
...ing;
- }
+ skip = skiploop();
+ } while (!(skip & ~SKIPCONT));
loopnest--;
exitstatus = status;
}
@@ -392,9 +409,6 @@ evalfor(union node *n, int flags)
arglist.lastp = &arglist.list;
for (argp = n->nfor.args ; argp ; argp = argp->narg.next) {
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE);
- /* XXX */
- if (evalskip)
- goto out;
}
*arglist.lastp = NULL;
@@ -404,18 +418,10 @@ evalfor(union node *n, int flags)
for (sp = arglist.list ; sp ; sp = sp->next) {
setvar(n->nfor.var, sp->text, 0);
evaltree(n->nfor.body, flags);
- if (evalskip) {
-...
2020 Mar 28
0
[klibc:update-dash] dash: eval: avoid leaking memory associated with redirections
...t *sp;
- struct stackmark smark;
int status;
errlinno = lineno = n->nfor.linno;
if (funcline)
lineno -= funcline - 1;
- setstackmark(&smark);
arglist.lastp = &arglist.list;
for (argp = n->nfor.args ; argp ; argp = argp->narg.next) {
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE);
@@ -420,7 +424,6 @@ evalfor(union node *n, int flags)
break;
}
loopnest--;
- popstackmark(&smark);
return status;
}
@@ -433,14 +436,12 @@ evalcase(union node *n, int flags)
union node *cp;
union node *patp;
struct arglist arglist;
- struct stackmark smark;
int...
2019 Jan 25
0
[klibc:update-dash] expand: Do not quote backslashes in unquoted parameter expansion
.../dash/expand.c
index 3abfa0c4..59a202cb 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -849,8 +849,7 @@ memtodest(const char *p, size_t len, const char *syntax, int quotes) {
if (c) {
if ((quotes & QUOTES_ESC) &&
((syntax[c] == CCTL) ||
- (((quotes & EXP_FULL) || syntax != BASESYNTAX) &&
- syntax[c] == CBACK)))
+ (syntax != BASESYNTAX && syntax[c] == CBACK)))
USTPUTC(CTLESC, q);
} else if (!(quotes & QUOTES_KEEPNUL))
continue;
@@ -1341,7 +1340,7 @@ expmeta(char *name, unsigned name_len, unsigned expdir_len)...
2020 Mar 28
0
[klibc:update-dash] dash: expand: Do not quote backslashes in unquoted parameter expansion
.../dash/expand.c
index 3abfa0c4..59a202cb 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -849,8 +849,7 @@ memtodest(const char *p, size_t len, const char *syntax, int quotes) {
if (c) {
if ((quotes & QUOTES_ESC) &&
((syntax[c] == CCTL) ||
- (((quotes & EXP_FULL) || syntax != BASESYNTAX) &&
- syntax[c] == CBACK)))
+ (syntax != BASESYNTAX && syntax[c] == CBACK)))
USTPUTC(CTLESC, q);
} else if (!(quotes & QUOTES_KEEPNUL))
continue;
@@ -1341,7 +1340,7 @@ expmeta(char *name, unsigned name_len, unsigned expdir_len)...
2019 Jan 25
0
[klibc:update-dash] builtin: Fix handling of trailing IFS white spaces
...,6 +50,7 @@
#include <glob.h>
#endif
#include <ctype.h>
+#include <stdbool.h>
/*
* Routines to expand arguments to commands. We have to deal with
@@ -203,7 +204,7 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
* TODO - EXP_REDIR
*/
if (flag & EXP_FULL) {
- ifsbreakup(p, &exparg);
+ ifsbreakup(p, -1, &exparg);
*exparg.lastp = NULL;
exparg.lastp = &exparg.list;
expandmeta(exparg.list, flag);
@@ -1016,15 +1017,18 @@ recordregion(int start, int end, int nulonly)
* Break the argument string into pieces based upon IFS and add...
2020 Mar 28
0
[klibc:update-dash] dash: builtin: Fix handling of trailing IFS white spaces
...,6 +50,7 @@
#include <glob.h>
#endif
#include <ctype.h>
+#include <stdbool.h>
/*
* Routines to expand arguments to commands. We have to deal with
@@ -203,7 +204,7 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
* TODO - EXP_REDIR
*/
if (flag & EXP_FULL) {
- ifsbreakup(p, &exparg);
+ ifsbreakup(p, -1, &exparg);
*exparg.lastp = NULL;
exparg.lastp = &exparg.list;
expandmeta(exparg.list, flag);
@@ -1016,15 +1017,18 @@ recordregion(int start, int end, int nulonly)
* Break the argument string into pieces based upon IFS and add...