Author: arekm                        Date: Tue Jul 28 07:50:05 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- rel 53; some openbsd fixes

---- Files affected:
packages/pdksh:
   pdksh-debian.patch (1.5 -> 1.6) , pdksh.spec (1.121 -> 1.122) , 
pdksh-openbsd.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/pdksh/pdksh-debian.patch
diff -u packages/pdksh/pdksh-debian.patch:1.5 
packages/pdksh/pdksh-debian.patch:1.6
--- packages/pdksh/pdksh-debian.patch:1.5       Thu May  8 08:36:06 2008
+++ packages/pdksh/pdksh-debian.patch   Tue Jul 28 09:49:59 2009
@@ -1,2670 +1,2774 @@
-  * Applied patch from upstream ftp site to fix problem with readonly
-    variables (closes: #57727).
-Index: pdksh/jobs.c
-===================================================================
---- pdksh.orig/jobs.c  2008-04-15 20:47:52.000000000 +0200
-+++ pdksh/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/shf.c
-===================================================================
---- pdksh.orig/shf.c   2008-04-15 20:47:52.000000000 +0200
-+++ pdksh/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/var.c
-===================================================================
---- pdksh.orig/var.c   2008-04-15 20:47:52.000000000 +0200
-+++ pdksh/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 */
-  * Applied patch from upstream author which fixed problem with 'set -e'
-    (closes: #71256).
-Index: pdksh/exec.c
-===================================================================
---- pdksh.orig/exec.c  2008-04-15 20:46:56.000000000 +0200
-+++ pdksh/exec.c       2008-04-15 20:49:17.000000000 +0200
-@@ -76,6 +76,7 @@
- {
-       int i;
-       volatile int rv = 0;
-+      volatile int rv_prop = 0; /* rv being propogated or newly generated? */
-       int pv[2];
-       char ** volatile ap;
-       char *s, *cp;
-@@ -157,6 +158,7 @@
- 
-         case TPAREN:
-               rv = execute(t->left, flags|XFORK);
-+              rv_prop = 1;
-               break;
- 
-         case TPIPE:
-@@ -275,6 +277,7 @@
-                       rv = execute(t->right, flags & XERROK);
-               else
-                       flags |= XERROK;
-+              rv_prop = 1;
-               break;
- 
-         case TBANG:
-@@ -323,6 +326,7 @@
-                       }
-               }
-               rv = 0; /* in case of a continue */
-+              rv_prop = 1;
-               if (t->type == TFOR) {
-                       while (*ap != NULL) {
-                               setstr(global(t->str), *ap++, KSH_UNWIND_ERROR);
-@@ -334,6 +338,7 @@
-                       for (;;) {
-                               if (!(cp = do_selectargs(ap, is_first))) {
-                                       rv = 1;
-+                                      rv_prop = 0;
-                                       break;
-                               }
-                               is_first = FALSE;
-@@ -365,6 +370,7 @@
-               rv = 0; /* in case of a continue */
-               while ((execute(t->left, XERROK) == 0) == (t->type == TWHILE))
-                       rv = execute(t->right, flags & XERROK);
-+              rv_prop = 1;
-               break;
- 
-         case TIF:
-@@ -374,6 +380,7 @@
-               rv = execute(t->left, XERROK) == 0 ?
-                       execute(t->right->left, flags & XERROK) :
-                       execute(t->right->right, flags & XERROK);
-+              rv_prop = 1;
-               break;
- 
-         case TCASE:
-@@ -386,10 +393,12 @@
-               break;
-         Found:
-               rv = execute(t->left, flags & XERROK);
-+              rv_prop = 1;
-               break;
- 
-         case TBRACE:
-               rv = execute(t->left, flags & XERROK);
-+              rv_prop = 1;
-               break;
- 
-         case TFUNCT:
-@@ -401,6 +410,7 @@
-                * (allows "ls -l | time grep foo").
-                */
-               rv = timex(t, flags & ~XEXEC);
-+              rv_prop = 1;
-               break;
- 
-         case TEXEC:           /* an eval'd TCOM */
-@@ -428,7 +438,7 @@
-       quitenv();              /* restores IO */
-       if ((flags&XEXEC))
-               unwind(LEXIT);  /* exit child */
--      if (rv != 0 && !(flags & XERROK)) {
-+      if (rv != 0 && !rv_prop && !(flags & XERROK)) {
-               if (Flag(FERREXIT))
-                       unwind(LERROR);
-               trapsig(SIGERR_);
-  * Applied some patches from OpenBSD:
-    + Use mkstemp to create temporary files    
-    + Kill -s now works
-    + Escapes special characters in tab completitions
-    + Introduce FSH flag, which is set when the shell is called as `sh'.
-    + tree.c: Fix three off-by-one errors.
-    + c_sh.c: don't set close-on-exec flag on file descriptors in FSH mode
-      (closes: #154540). Documented the change in ksh(1).
-    + history.c: Compare the return from mmap with MAP_FAILED, do not cast it
-      to int and compare with -1.
-    + main.c: set edit mode to emacs by default, may be overridden by the
-      environment or the user.  Also, we want tab completion in vi by default.
-    + misc.c: use strtol() in getn().
-    + emacs.c:
-       - bind TAB (^I) to complete-list by default
-       - complete-list first completes; if that does not work, it lists
-       - fix a memleak in do_complete()
-    + edit.c:
-       - completion now works after '=' (dd), and ':' (ssh) and ` (backtick)
-       - add '#' to the list of escaped characters during vi/emacs filename
-         completion
-
-    + exec.c: Found and fixed yet another problem with `set -e' scripts
-      (see a changelog entry for 5.2.14-3), which caused `dpkg-buildpackage -B'
-      to fail on systems where /bin/sh is ksh.
-  
-    + c_sh.c: Make `set' command return 0 always, not only in the POSIX mode.
-      According to Jeff Sheinberg <[email protected]>, this new behaviour
-      is more compatible with SUSv2 standard and other shells (esp. ksh93)
-      (closes: #118476). Documented the change in ksh(1) man page.
-
-    + c_test.c: The special case code for "test -x" over NFS was
-      incorrect.  The right thing to do is to try access(2) first
-      (since that occurs on the NFS server side) and only check for the
-      absence of an execute bit when access(2) succeeds.
-    + edit.c: in word location, fix forward scanning so it correctly
-      account for any escaped char and not only spaces.  for "foo
-      (bar.a)" and "foo (bar a)", cd foo\ \(bar.<tab> will correctly
-      expand to foo\ \(bar.a\).
-
-    + vi.c: Buffers are not strings so use memcpy(), not strlcpy() to copy
-      them. Also add some further bounds checks in the name of paranoia.
-    + exec.c: Unbreak parameter assignment when calling bourne style
-      functions.
-    + exec.c: For the >& and <& operators, add a check for "dup from" ==
-      "dup to" and just return success if they are the same.  Fixes the
-      "ls 2>&2" problem.
-    + eval.c, exec.c, io.c, jobs.c: If "from fd" == "to fd" don't call
-      dup2() or close "from fd".
-     
-Index: pdksh/c_ksh.c
-===================================================================
---- pdksh.orig/c_ksh.c 2008-04-15 20:46:56.000000000 +0200
-+++ pdksh/c_ksh.c      2008-04-15 20:49:47.000000000 +0200
-@@ -1208,6 +1208,7 @@
-                                               builtin_opt.optarg);
-                                       return 1;
-                               }
-+                              break;          
-                         case '?':
-                               return 1;
-                       }
-Index: pdksh/edit.c
-===================================================================
---- pdksh.orig/edit.c  2008-04-15 20:46:56.000000000 +0200
-+++ pdksh/edit.c       2008-04-15 20:49:47.000000000 +0200
-@@ -15,6 +15,9 @@
- # include <sys/stream.h>      /* needed for <sys/ptem.h> */
- # include <sys/ptem.h>                /* needed for struct winsize */
- #endif /* OS_SCO */
-+#ifdef DEBIAN
-+#include <sys/ioctl.h>
-+#endif /* DEBIAN */
- #include <ctype.h>
- #include "ksh_stat.h"
- 
-@@ -552,7 +555,11 @@
- {
-       char *toglob;
-       char **words;
-+#ifndef DEBIAN 
-       int nwords;
-+#else /* DEBIAN */ /* patch from OpenBSD */ 
-+      int nwords, i, idx, escaping;
-+#endif /* DEBIAN */
-       XPtrV w;
-       struct source *s, *sold;
- 
-@@ -561,6 +568,22 @@
- 
-       toglob = add_glob(str, slen);
- 
-+#ifdef DEBIAN /* patch from OpenBSD */
-+      /* remove all escaping backward slashes */
-+      escaping = 0;
-+      for(i = 0, idx = 0; toglob[i]; i++) {
-+              if (toglob[i] == '\\' && !escaping) {
-+                      escaping = 1;
-+                      continue;
-+              }
-+
-+              toglob[idx] = toglob[i];
-+              idx++;
-+              if (escaping) escaping = 0;
-+      }
-+      toglob[idx] = '\0';
-+
-+#endif /* DEBIAN */
-       /*
-        * Convert "foo*" (toglob) to an array of strings (words)
-        */
-@@ -722,7 +745,12 @@
-       return nwords;
- }
- 
-+#ifndef DEBIAN
- #define IS_WORDC(c)   !(ctype(c, C_LEX1) || (c) == '\'' || (c) == '"')
-+#else /* patch from OpenBSD */
-+#define IS_WORDC(c)   !( ctype(c, C_LEX1) || (c) == '\'' || (c) == '"'  \
-+                          || (c) == '`' || (c) == '=' || (c) == ':' )
-+#endif
- 
- static int
- x_locate_word(buf, buflen, pos, startp, is_commandp)
-@@ -747,11 +775,23 @@
-       /* Keep going backwards to start of word (has effect of allowing
-        * one blank after the end of a word)
-        */
-+#ifndef DEBIAN
-       for (; start > 0 && IS_WORDC(buf[start - 1]); start--)
-+#else /* DEBIAN */ /* patch from OpenBSD */ 
-+      for (; (start > 0 && IS_WORDC(buf[start - 1]))
-+              || (start > 1 && buf[start-2] == '\\'); start--)
-+#endif /* DEBIAN */
-               ;
-       /* Go forwards to end of word */
-+#ifndef DEBIAN
-       for (end = start; end < buflen && IS_WORDC(buf[end]); end++)
-               ;
-+#else /* DEBIAN */ /* patch from OpenBSD */ 
-+      for (end = start; end < buflen && IS_WORDC(buf[end]); end++) {
-+              if (buf[end] == '\\' && (end+1) < buflen)
-+                      end++;
-+      }
-+#endif /* DEBIAN */
- 
-       if (is_commandp) {
-               int iscmd;
-@@ -759,7 +799,11 @@
-               /* Figure out if this is a command */
-               for (p = start - 1; p >= 0 && isspace(buf[p]); p--)
-                       ;
-+#ifndef DEBIAN
-               iscmd = p < 0 || strchr(";|&()", buf[p]);
-+#else /* DEBIAN */ /* patch from OpenBSD */           
-+              iscmd = p < 0 || strchr(";|&()`", buf[p]);
-+#endif
-               if (iscmd) {
-                       /* If command has a /, path, etc. is not searched;
-                        * only current directory is searched, which is just
-@@ -961,6 +1005,9 @@
- {
-       const char *sp, *p;
-       char *xp;
-+#ifdef DEBIAN /* patch from OpenBSD */
-+      int staterr;
-+#endif /* DEBIAN */   
-       int pathlen;
-       int patlen;
-       int oldsize, newsize, i, j;
-@@ -995,13 +1042,23 @@
-               memcpy(xp, pat, patlen);
- 
-               oldsize = XPsize(*wp);
-+#ifndef DEBIAN                
-               glob_str(Xstring(xs, xp), wp, 0);
-+#else /* DEBIAN */ /* patch from OpenBSD */
-+              glob_str(Xstring(xs, xp), wp, 1); /* mark dirs */
-+#endif                
-               newsize = XPsize(*wp);
- 
-               /* Check that each match is executable... */
-               words = (char **) XPptrv(*wp);
-               for (i = j = oldsize; i < newsize; i++) {
-+#ifndef DEBIAN
-                       if (search_access(words[i], X_OK, (int *) 0) >= 0) {
-+#else /* DEBIAN */ /* patch from OpenBSD */
-+                      staterr = 0;
-+                      if ((search_access(words[i], X_OK, &staterr) >= 0)
-+                          || (staterr == EISDIR)) {
-+#endif                                
-                               words[j] = words[i];
-                               if (!(flags & XCF_FULLPATH))
-                                       memmove(words[j], words[j] + pathlen,
-@@ -1018,4 +1075,42 @@
-       Xfree(xs, xp);
- }
- 
-+#ifdef DEBIAN /* patch from OpenBSD */  
-+/*
-+ * if argument string contains any special characters, they will
-+ * be escaped and the result will be put into edit buffer by
-+ * keybinding-specific function
-+ */
-+int
-+x_escape(s, len, putbuf_func)
-+      const char *s;
-+      size_t len;
-+      int putbuf_func ARGS((const char *s, size_t len));
-+{
-+      size_t add, wlen;
-+      const char *ifs = str_val(local("IFS", 0));
-+      int rval=0;
-+
-+      for (add = 0, wlen = len; wlen - add > 0; add++) {
-+              if (strchr("\\$(){}*&;#|<>\"'`", s[add]) || strchr(ifs, 
s[add])) {
-+                      if (putbuf_func(s, add) != 0) {
-+                              rval = -1;
-+                              break;
-+                      }
-+
-+                      putbuf_func("\\", 1);
-+                      putbuf_func(&s[add], 1);
-+
-+                      add++;
-+                      wlen -= add;
-+                      s += add;
-+                      add = -1; /* after the increment it will go to 0 */
-+              }
-+      }
-+      if (wlen > 0 && rval == 0)
-+              rval = putbuf_func(s, wlen);
-+
-+      return (rval);
-+}
-+#endif /* DEBIAN */
- #endif /* EDIT */
-Index: pdksh/edit.h
-===================================================================
---- pdksh.orig/edit.h  2008-04-15 20:46:56.000000000 +0200
-+++ pdksh/edit.h       2008-04-15 20:49:47.000000000 +0200
-@@ -55,6 +55,9 @@
- int   x_longest_prefix ARGS((int nwords, char *const *words));
- int   x_basename ARGS((const char *s, const char *se));
- void  x_free_words ARGS((int nwords, char **words));
-+#ifdef DEBIAN /* patch from OpenBSD */ 
-+int   x_escape ARGS((const char *, size_t, int (*)(const char *s, size_t 
len)));
-+#endif /* DEBIAN */
- /* emacs.c */
- int   x_emacs         ARGS((char *buf, size_t len));
- void  x_init_emacs    ARGS((void));
-Index: pdksh/emacs.c
-===================================================================
---- pdksh.orig/emacs.c 2008-04-15 20:46:56.000000000 +0200
-+++ pdksh/emacs.c      2008-04-15 20:49:47.000000000 +0200
-@@ -138,6 +138,10 @@
- static int    x_e_getc    ARGS((void));
- static void   x_e_putc    ARGS((int c));
- static void   x_e_puts    ARGS((const char *s));
-+#ifdef DEBIAN /* patch from OpenBSD */ 
-+static int    x_comment   ARGS((int c));
-+static int    x_emacs_putbuf  ARGS((const char *s, size_t len));
-+#endif /* DEBIAN */
- static int    x_fold_case ARGS((int c));
- static char   *x_lastcp ARGS((void));
- static void   do_complete ARGS((int flags, Comp_type type));
-@@ -269,6 +273,9 @@
-       { XFUNC_transpose,              0, CTRL('T') },
- #endif
-       { XFUNC_complete,               1, CTRL('[') },
-+#ifdef DEBIAN /* patch from OpenBSD */ 
-+      { XFUNC_comp_list,              0, CTRL('I') },
-+#endif /* DEBIAN */
-         { XFUNC_comp_list,            1,      '='  },
-       { XFUNC_enumerate,              1,      '?'  },
-         { XFUNC_expand,                       1,      '*'  },
-@@ -313,6 +320,9 @@
-        * entries.
-        */
-         { XFUNC_meta2,                        1,      '['  },
-+#ifdef DEBIAN  /* patch from OpenBSD */ 
-+        { XFUNC_meta2,                        1,      'O'  },
-+#endif /* DEBIAN */
-       { XFUNC_prev_com,               2,      'A'  },
-       { XFUNC_next_com,               2,      'B'  },
-       { XFUNC_mv_forw,                2,      'C'  },
-@@ -468,6 +478,23 @@
-       return 0;
- }
- 
-+#ifdef DEBIAN  /* patch from OpenBSD */ 
-+/*
-+ * this is used for x_escape() in do_complete()
-+ */
-+static int
-+x_emacs_putbuf(s, len)
-+      const char *s;
-+      size_t len;
-+{
-+      int rval;
-+
-+      if ((rval = x_do_ins(s, len)) != 0)
-+              return (rval);
-+      return (rval);
-+}
-+
-+#endif /* DEBIAN */
- static int
- x_del_back(c)
-       int c;
-@@ -1485,7 +1512,11 @@
-               for (j = 0; j < X_TABSZ; j++)
-                       x_tab[i][j] = XFUNC_error;
-       for (i = 0; i < NELEM(x_defbindings); i++)
-+#ifndef DEBIAN
-               x_tab[x_defbindings[i].xdb_tab][x_defbindings[i].xdb_char]
-+#else /* DEBIAN */ /* patch from OpenBSD */ 
-+              x_tab[(unsigned 
char)x_defbindings[i].xdb_tab][x_defbindings[i].xdb_char]
-+#endif /* DEBIAN */
-                       = x_defbindings[i].xdb_func;
- 
-       x_atab = (char *(*)[X_TABSZ]) alloc(sizeofN(*x_atab, X_NTABS), AEDIT);
-@@ -1754,6 +1785,7 @@
-       int flags;      /* XCF_{COMMAND,FILE,COMMAND_FILE} */
-       Comp_type type;
- {
-+#ifndef DEBIAN
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/pdksh/pdksh-debian.patch?r1=1.5&r2=1.6&f=u
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/pdksh/pdksh.spec?r1=1.121&r2=1.122&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to