mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-21 19:42:24 +01:00
84 lines
2.3 KiB
Diff
84 lines
2.3 KiB
Diff
* 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 {
|