cosmo: update unbourne patch

This commit is contained in:
Connor Olding 2022-10-10 13:07:41 -07:00
parent ccc5b88168
commit 2f50833941

View File

@ -1406,12 +1406,10 @@
} }
static void dupredirect(union node *redir, int f) { static void dupredirect(union node *redir, int f) {
@@ -9148,13 +9204,13 @@ @@ -9149,12 +9205,12 @@
int i;
INTOFF; INTOFF;
rp = redirlist; rp = redirlist;
- for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
+ for (i = 0 ; i < 10 ; i++) {
+ int closed; + int closed;
+ if (rp->renamed[i] == EMPTY) continue; + if (rp->renamed[i] == EMPTY) continue;
+ closed = drop ? 1 : update_closed_redirs(i, rp->renamed[i]); + closed = drop ? 1 : update_closed_redirs(i, rp->renamed[i]);
@ -1545,7 +1543,7 @@
{ {
char **envp; char **envp;
static char ppid[32] = "PPID="; static char ppid[32] = "PPID=";
@@ -10543,12 +10583,14 @@ @@ -10543,12 +10583,13 @@
static void exitreset() { static void exitreset() {
/* from eval.c: */ /* from eval.c: */
{ {
@ -1553,8 +1551,7 @@
- loopnest = 0; - loopnest = 0;
if (savestatus >= 0) { if (savestatus >= 0) {
- exitstatus = savestatus; - exitstatus = savestatus;
+ if (exception == EXEXIT || evalskip == SKIPFUNCDEF) + if (exception == EXEXIT || evalskip == SKIPFUNCDEF) exitstatus = savestatus;
+ exitstatus = savestatus;
savestatus = -1; savestatus = -1;
} }
+ evalskip = 0; + evalskip = 0;
@ -1563,7 +1560,7 @@
} }
/* from expand.c: */ /* from expand.c: */
{ ifsfree(); } { ifsfree(); }
@@ -10561,6 +10603,43 @@ @@ -10561,6 +10602,42 @@
} }
} }
@ -1595,8 +1592,7 @@
+ if (*tp && **tp) { /* trap not NULL or SIG_IGN */ + if (*tp && **tp) { /* trap not NULL or SIG_IGN */
+ ckfree(*tp); + ckfree(*tp);
+ *tp = NULL; + *tp = NULL;
+ if (tp != &trap[0]) + if (tp != &trap[0]) setsignal(tp - trap);
+ setsignal(tp - trap);
+ } + }
+ } + }
+ trapcnt = 0; + trapcnt = 0;
@ -1607,7 +1603,7 @@
/* /*
* This routine is called when an error or an interrupt occurs in an * This routine is called when an error or an interrupt occurs in an
* interactive shell and control is returned to the main command loop. * interactive shell and control is returned to the main command loop.
@@ -10570,10 +10649,10 @@ @@ -10570,10 +10647,10 @@
{ {
/* clear input buffer */ /* clear input buffer */
basepf.lleft = basepf.nleft = 0; basepf.lleft = basepf.nleft = 0;
@ -1620,16 +1616,13 @@
{ {
unwindlocalvars(0); unwindlocalvars(0);
} }
@@ -10815,11 +10894,17 @@ @@ -10815,11 +10892,14 @@
if (n == NEOF) { if (n == NEOF) {
if (!top || numeof >= 50) break; if (!top || numeof >= 50) break;
if (!stoppedjobs()) { if (!stoppedjobs()) {
- if (!Iflag) break; - if (!Iflag) break;
+ if (!Iflag) { + if (!Iflag) {
+ if (iflag) { + if (iflag) outcslow('\n', out2);
+ outcslow('\n', out2);
+ flushout(out2);
+ }
+ break; + break;
+ } + }
outstr("\nUse \"exit\" to leave shell.\n", out2); outstr("\nUse \"exit\" to leave shell.\n", out2);
@ -1640,7 +1633,7 @@
int i; int i;
job_warning = (job_warning == 2) ? 1 : 0; job_warning = (job_warning == 2) ? 1 : 0;
numeof = 0; numeof = 0;
@@ -10899,17 +10984,16 @@ @@ -10899,17 +10979,16 @@
int main(int argc, char **argv) { int main(int argc, char **argv) {
char *shinit; char *shinit;
volatile int state; volatile int state;
@ -1660,7 +1653,7 @@
reset(); reset();
if (e == EXINT) { if (e == EXINT) {
outcslow('\n', out2); outcslow('\n', out2);
@@ -10926,7 +11010,7 @@ @@ -10926,7 +11005,7 @@
goto state4; goto state4;
} }
} }