parent
4c4ba6a980
commit
7a47bd816d
|
@ -0,0 +1,65 @@
|
|||
From 469c5fd4f57622b1a6571172898ab29430319d4a Mon Sep 17 00:00:00 2001
|
||||
From: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Date: Fri, 11 May 2018 23:41:25 +0800
|
||||
Subject: parser: Fix incorrect eating of backslash newlines
|
||||
|
||||
With the introduction of synstack->syntax, a number of references
|
||||
to the syntax variable was missed during the conversion. This
|
||||
causes backslash newlines to be incorrectly removed in single
|
||||
quote context.
|
||||
|
||||
This patch also combines these calls into a new helper function
|
||||
pgetc_top.
|
||||
|
||||
Fixes: ab1cecb40478 ("parser: Add syntax stack for recursive...")
|
||||
Reported-by: Leah Neukirchen <leah@vuxu.org>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
src/parser.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
--- src/parser.c
|
||||
+++ src/parser.c
|
||||
@@ -853,6 +853,11 @@ static int pgetc_eatbnl(void)
|
||||
return c;
|
||||
}
|
||||
|
||||
+static int pgetc_top(struct synstack *stack)
|
||||
+{
|
||||
+ return stack->syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
||||
+}
|
||||
+
|
||||
static void synstack_push(struct synstack **stack, struct synstack *next,
|
||||
const char *syntax)
|
||||
{
|
||||
@@ -915,7 +920,7 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs)
|
||||
attyline();
|
||||
if (synstack->syntax == BASESYNTAX)
|
||||
return readtoken();
|
||||
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
||||
+ c = pgetc_top(synstack);
|
||||
goto loop;
|
||||
}
|
||||
#endif
|
||||
@@ -929,7 +934,7 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs)
|
||||
goto endword; /* exit outer loop */
|
||||
USTPUTC(c, out);
|
||||
nlprompt();
|
||||
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
||||
+ c = pgetc_top(synstack);
|
||||
goto loop; /* continue outer loop */
|
||||
case CWORD:
|
||||
USTPUTC(c, out);
|
||||
@@ -1056,7 +1061,7 @@ toggledq:
|
||||
USTPUTC(c, out);
|
||||
}
|
||||
}
|
||||
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
||||
+ c = pgetc_top(synstack);
|
||||
}
|
||||
}
|
||||
endword:
|
||||
--
|
||||
cgit v1.1
|
||||
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
Subject: [PATCH v3] jobs - Do not block when waiting on SIGCHLD
|
||||
Message-ID: <20180506164034.s6y4n7yt2gianh63@gondor.apana.org.au>
|
||||
|
||||
diff --git a/src/eval.c b/src/eval.c
|
||||
index a27d657..39c4e41 100644
|
||||
--- src/eval.c
|
||||
+++ src/eval.c
|
||||
@@ -859,10 +859,8 @@ bail:
|
||||
if (!(flags & EV_EXIT) || have_traps()) {
|
||||
INTOFF;
|
||||
jp = makejob(cmd, 1);
|
||||
- if (forkshell(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);
|
||||
}
|
||||
@@ -892,6 +887,7 @@ raise:
|
||||
}
|
||||
|
||||
status = waitforjob(jp);
|
||||
+ FORCEINTON;
|
||||
|
||||
out:
|
||||
if (cmd->ncmd.redirect)
|
||||
--- src/jobs.c
|
||||
+++ src/jobs.c
|
||||
@@ -975,10 +975,17 @@ waitforjob(struct job *jp)
|
||||
int st;
|
||||
|
||||
TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
|
||||
- while ((jp && jp->state == JOBRUNNING) || gotsigchld)
|
||||
- dowait(DOWAIT_BLOCK, jp);
|
||||
- if (!jp)
|
||||
+ if (!jp) {
|
||||
+ int pid = gotsigchld;
|
||||
+
|
||||
+ while (pid > 0)
|
||||
+ pid = dowait(DOWAIT_NORMAL, NULL);
|
||||
+
|
||||
return exitstatus;
|
||||
+ }
|
||||
+
|
||||
+ while (jp->state == JOBRUNNING)
|
||||
+ dowait(DOWAIT_BLOCK, jp);
|
||||
st = getstatus(jp);
|
||||
#if JOBS
|
||||
if (jp->jobctl) {
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'dash'
|
||||
pkgname=dash
|
||||
version=0.5.10
|
||||
revision=3
|
||||
version=0.5.10.1
|
||||
revision=1
|
||||
build_style=gnu-configure
|
||||
hostmakedepends="bison"
|
||||
register_shell="/bin/sh /bin/dash"
|
||||
|
@ -10,7 +10,7 @@ maintainer="Juan RP <xtraeme@voidlinux.eu>"
|
|||
license="BSD-3-Clause"
|
||||
homepage="http://gondor.apana.org.au/~herbert/dash/"
|
||||
distfiles="http://gondor.apana.org.au/~herbert/dash/files/$pkgname-$version.tar.gz"
|
||||
checksum=ad70e0cc3116b424931c392912b3ebdb8053b21f3fd968c782f0b19fd8ae31ab
|
||||
checksum=daac92be392ea5d9b03e8879384e437828e636b9f491a275a607f85d7e5e84ae
|
||||
|
||||
alternatives="
|
||||
sh:sh:/usr/bin/dash
|
||||
|
|
Loading…
Reference in New Issue