summaryrefslogtreecommitdiff
path: root/Src/Builtins/rlimits.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Builtins/rlimits.c')
-rw-r--r--Src/Builtins/rlimits.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/Src/Builtins/rlimits.c b/Src/Builtins/rlimits.c
index 56f67f06c..db84d8425 100644
--- a/Src/Builtins/rlimits.c
+++ b/Src/Builtins/rlimits.c
@@ -462,7 +462,7 @@ bin_unlimit(char *nam, char **argv, Options ops, int func)
static int
bin_ulimit(char *name, char **argv, Options ops, int func)
{
- int res, resmask = 0, hard = 0, soft = 0, nres = 0;
+ int res, resmask = 0, hard = 0, soft = 0, nres = 0, all = 0;
char *options;
do {
@@ -486,11 +486,12 @@ bin_ulimit(char *name, char **argv, Options ops, int func)
soft = 1;
continue;
case 'a':
- if (*argv || options[1] || resmask) {
- zwarnnam(name, "no arguments required after -a",
+ if (resmask) {
+ zwarnnam(name, "no limits allowed with -a",
NULL, 0);
return 1;
}
+ all = 1;
resmask = (1 << RLIM_NLIMITS) - 1;
nres = RLIM_NLIMITS;
continue;
@@ -547,6 +548,11 @@ bin_ulimit(char *name, char **argv, Options ops, int func)
resmask |= 1 << res;
nres++;
}
+ if (all && res != -1) {
+ zwarnnam(name, "no limits allowed with -a",
+ NULL, 0);
+ return 1;
+ }
}
}
if (!*argv || **argv == '-') {
@@ -560,6 +566,10 @@ bin_ulimit(char *name, char **argv, Options ops, int func)
nres++;
continue;
}
+ if (all) {
+ zwarnnam(name, "no arguments allowed after -a", NULL, 0);
+ return 1;
+ }
if (res < 0)
res = RLIMIT_FSIZE;
if (strcmp(*argv, "unlimited")) {