diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/parser.c | 14 |
2 files changed, 16 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 56acd66..8b392f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-12-27 Herbert Xu <herbert@gondor.apana.org.au> + + * Add FAKEEOFMARK for expandstr. + 2007-12-23 Gerrit Pape <pape@smarden.org> * If imaxdiv() isn't available, use / and % operators. diff --git a/src/parser.c b/src/parser.c index 2d20b00..3206328 100644 --- a/src/parser.c +++ b/src/parser.c @@ -64,6 +64,11 @@ +/* Used by expandstr to get here-doc like behaviour. */ +#define FAKEEOFMARK (char *)1 + + + struct heredoc { struct heredoc *next; /* next here document in list */ union node *here; /* redirection node */ @@ -113,6 +118,11 @@ isassignment(const char *p) return *q == '='; } +static inline int realeofmark(const char *eofmark) +{ + return eofmark && eofmark != FAKEEOFMARK; +} + /* * Read and parse a command. Returns NEOF on end of file. (NULL is a @@ -1030,7 +1040,7 @@ endword: */ checkend: { - if (eofmark) { + if (realeofmark(eofmark)) { int markloc; char *p; @@ -1492,7 +1502,7 @@ expandstr(const char *ps) /* XXX Fix (char *) cast. */ setinputstring((char *)ps); - readtoken1(pgetc(), DQSYNTAX, nullstr, 0); + readtoken1(pgetc(), DQSYNTAX, FAKEEOFMARK, 0); popfile(); n.narg.type = NARG; |