dash: update to 0.5.10.1.

resolves #14282
This commit is contained in:
maxice8 2018-05-15 15:00:31 -03:00 committed by Leah Neukirchen
parent 4c4ba6a980
commit 7a47bd816d
3 changed files with 68 additions and 67 deletions

View File

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

View File

@ -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) {

View File

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