diff options
Diffstat (limited to 'system/pdksh/patches/001_upstream-readonly-vars.patch')
-rw-r--r-- | system/pdksh/patches/001_upstream-readonly-vars.patch | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/system/pdksh/patches/001_upstream-readonly-vars.patch b/system/pdksh/patches/001_upstream-readonly-vars.patch deleted file mode 100644 index 616a5102d9..0000000000 --- a/system/pdksh/patches/001_upstream-readonly-vars.patch +++ /dev/null @@ -1,172 +0,0 @@ - * Applied patch from upstream ftp site to fix problem with readonly - variables (closes: #57727). -Index: pdksh-5.2.14/jobs.c -=================================================================== ---- pdksh-5.2.14.orig/jobs.c 2008-04-15 20:47:52.000000000 +0200 -+++ pdksh-5.2.14/jobs.c 2008-04-15 20:48:46.000000000 +0200 -@@ -219,8 +219,7 @@ - static void check_job ARGS((Job *j)); - static void put_job ARGS((Job *j, int where)); - static void remove_job ARGS((Job *j, const char *where)); --static void kill_job ARGS((Job *j)); --static void fill_command ARGS((char *c, int len, struct op *t)); -+static int kill_job ARGS((Job *j, int sig)); - - /* initialize job control */ - void -@@ -294,10 +293,17 @@ - && procpid == kshpid))))) - { - killed = 1; -- killpg(j->pgrp, SIGHUP); -+ if (j->pgrp == 0) -+ kill_job(j, SIGHUP); -+ else -+ killpg(j->pgrp, SIGHUP); - #ifdef JOBS -- if (j->state == PSTOPPED) -- killpg(j->pgrp, SIGCONT); -+ if (j->state == PSTOPPED) { -+ if (j->pgrp == 0) -+ kill_job(j, SIGCONT); -+ else -+ killpg(j->pgrp, SIGCONT); -+ } - #endif /* JOBS */ - } - } -@@ -497,7 +503,7 @@ - put_job(j, PJ_PAST_STOPPED); - } - -- fill_command(p->command, sizeof(p->command), t); -+ snptreef(p->command, sizeof(p->command), "%T", t); - - /* create child process */ - forksleep = 1; -@@ -508,7 +514,7 @@ - forksleep <<= 1; - } - if (i < 0) { -- kill_job(j); -+ kill_job(j, SIGKILL); - remove_job(j, "fork failed"); - #ifdef NEED_PGRP_SYNC - if (j_sync_open) { -@@ -823,11 +829,10 @@ - } - - if (j->pgrp == 0) { /* started when !Flag(FMONITOR) */ -- for (p=j->proc_list; p != (Proc *) 0; p = p->next) -- if (kill(p->pid, sig) < 0) { -- bi_errorf("%s: %s", cp, strerror(errno)); -- rv = 1; -- } -+ if (kill_job(j, sig) < 0) { -+ bi_errorf("%s: %s", cp, strerror(errno)); -+ rv = 1; -+ } - } else { - #ifdef JOBS - if (j->state == PSTOPPED && (sig == SIGTERM || sig == SIGHUP)) -@@ -1825,50 +1830,17 @@ - * - * If jobs are compiled in then this routine expects sigchld to be blocked. - */ --static void --kill_job(j) -+static int -+kill_job(j, sig) - Job *j; -+ int sig; - { - Proc *p; -+ int rval = 0; - - for (p = j->proc_list; p != (Proc *) 0; p = p->next) - if (p->pid != 0) -- (void) kill(p->pid, SIGKILL); --} -- --/* put a more useful name on a process than snptreef does (in certain cases) */ --static void --fill_command(c, len, t) -- char *c; -- int len; -- struct op *t; --{ -- int alen; -- char **ap; -- -- if (t->type == TEXEC || t->type == TCOM) { -- /* Causes problems when set -u is in effect, can also -- cause problems when array indices evaluated (may have -- side effects, eg, assignment, incr, etc.) -- if (t->type == TCOM) -- ap = eval(t->args, DOBLANK|DONTRUNCOMMAND); -- else -- */ -- ap = t->args; -- --len; /* save room for the null */ -- while (len > 0 && *ap != (char *) 0) { -- alen = strlen(*ap); -- if (alen > len) -- alen = len; -- memcpy(c, *ap, alen); -- c += alen; -- len -= alen; -- if (len > 0) { -- *c++ = ' '; len--; -- } -- ap++; -- } -- *c = '\0'; -- } else -- snptreef(c, len, "%T", t); -+ if (kill(p->pid, sig) < 0) -+ rval = -1; -+ return rval; - } -Index: pdksh-5.2.14/shf.c -=================================================================== ---- pdksh-5.2.14.orig/shf.c 2008-04-15 20:47:52.000000000 +0200 -+++ pdksh-5.2.14/shf.c 2008-04-15 20:48:46.000000000 +0200 -@@ -355,7 +355,6 @@ - shf->rp = nbuf + (shf->rp - shf->buf); - shf->wp = nbuf + (shf->wp - shf->buf); - shf->rbsize += shf->wbsize; -- shf->wbsize += shf->wbsize; - shf->wnleft += shf->wbsize; - shf->wbsize *= 2; - shf->buf = nbuf; -Index: pdksh-5.2.14/var.c -=================================================================== ---- pdksh-5.2.14.orig/var.c 2008-04-15 20:47:52.000000000 +0200 -+++ pdksh-5.2.14/var.c 2008-04-15 20:48:46.000000000 +0200 -@@ -353,7 +353,9 @@ - const char *s; - int error_ok; - { -- if (vq->flag & RDONLY) { -+ int no_ro_check = error_ok & 0x4; -+ error_ok &= ~0x4; -+ if ((vq->flag & RDONLY) && !no_ro_check) { - warningf(TRUE, "%s: is read only", vq->name); - if (!error_ok) - errorf(null); -@@ -715,13 +717,13 @@ - if (val != NULL) { - if (vp->flag&INTEGER) { - /* do not zero base before assignment */ -- setstr(vp, val, KSH_UNWIND_ERROR); -+ setstr(vp, val, KSH_UNWIND_ERROR | 0x4); - /* Done after assignment to override default */ - if (base > 0) - vp->type = base; - } else - /* setstr can't fail (readonly check already done) */ -- setstr(vp, val, KSH_RETURN_ERROR); -+ setstr(vp, val, KSH_RETURN_ERROR | 0x4); - } - - /* only x[0] is ever exported, so use vpbase */ |