diff options
Diffstat (limited to 'system/pdksh/patches/020_PLD-patches.patch')
-rw-r--r-- | system/pdksh/patches/020_PLD-patches.patch | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/system/pdksh/patches/020_PLD-patches.patch b/system/pdksh/patches/020_PLD-patches.patch deleted file mode 100644 index 81c189f243..0000000000 --- a/system/pdksh/patches/020_PLD-patches.patch +++ /dev/null @@ -1,84 +0,0 @@ - * Apply patches from PLD distribution (pdksh-5.2.14-23.src.rpm) - + pdksh-eval-segv.patch, fixes one more segfault bug - + pdksh-rlimit_locks.patch, adds flocks support to ulimit. - * c_ulimit.c: enclose all uses of RLIMIT_LOCKS with appropriate #ifdefs - (closes: #307323). -Index: pdksh-5.2.14/c_sh.c -=================================================================== ---- pdksh-5.2.14.orig/c_sh.c 2008-04-15 20:49:47.000000000 +0200 -+++ pdksh-5.2.14/c_sh.c 2008-04-15 20:50:48.000000000 +0200 -@@ -422,7 +422,8 @@ - c_eval(wp) - char **wp; - { -- register struct source *s; -+ register struct source *s,*olds=source; -+ int retval; - - if (ksh_getopt(wp, &builtin_opt, null) == '?') - return 1; -@@ -456,7 +457,9 @@ - exstat = subst_exstat; - } - -- return shell(s, FALSE); -+ retval=shell(s, FALSE); -+ source=olds; -+ return retval; - } - - int -Index: pdksh-5.2.14/c_ulimit.c -=================================================================== ---- pdksh-5.2.14.orig/c_ulimit.c 2008-04-15 20:46:56.000000000 +0200 -+++ pdksh-5.2.14/c_ulimit.c 2008-04-15 20:50:48.000000000 +0200 -@@ -111,6 +111,9 @@ - #ifdef RLIMIT_SWAP - { "swap(kbytes)", RLIMIT_SWAP, RLIMIT_SWAP, 1024, 'w' }, - #endif -+#ifdef RLIMIT_LOCKS -+ { "flocks", RLIMIT, RLIMIT_LOCKS, RLIMIT_LOCKS, -1, 'L' }, -+#endif - { (char *) 0 } - }; - static char options[3 + NELEM(limits)]; -@@ -189,7 +192,18 @@ - for (l = limits; l->name; l++) { - #ifdef HAVE_SETRLIMIT - if (l->which == RLIMIT) { -- getrlimit(l->gcmd, &limit); -+ int getreturn; -+ -+ getreturn=getrlimit(l->gcmd, &limit); -+#ifdef RLIMIT_LOCKS -+ if ( getreturn < 0 ) { -+ if ( ( errno == EINVAL ) && -+ ( l->gcmd == RLIMIT_LOCKS ) ) { -+ limit.rlim_cur = RLIM_INFINITY; -+ limit.rlim_max = RLIM_INFINITY; -+ } -+ } -+#endif - if (how & SOFT) - val = limit.rlim_cur; - else if (how & HARD) -@@ -225,11 +239,17 @@ - if (how & HARD) - limit.rlim_max = val; - if (setrlimit(l->scmd, &limit) < 0) { -- if (errno == EPERM) -+ if (errno == EPERM) { - bi_errorf("exceeds allowable limit"); -- else -+#ifdef RLIMIT_LOCKS -+ } else if ( ( errno == EINVAL ) && -+ ( l->scmd == RLIMIT_LOCKS ) ) { -+ bi_errorf("unable to set it on the current kernel"); -+#endif -+ } else { - bi_errorf("bad limit: %s", - strerror(errno)); -+ } - return 1; - } - } else { |