OpenCoverage

ulimit.def

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/builtins/ulimit.def
Source codeSwitch to Preprocessed file
LineSourceCount
1This file is ulimit.def, from which is created ulimit.c.-
2It implements the builtin "ulimit" in Bash.-
3-
4Copyright (C) 1987-2015 Free Software Foundation, Inc.-
5-
6This file is part of GNU Bash, the Bourne Again SHell.-
7-
8Bash is free software: you can redistribute it and/or modify-
9it under the terms of the GNU General Public License as published by-
10the Free Software Foundation, either version 3 of the License, or-
11(at your option) any later version.-
12-
13Bash is distributed in the hope that it will be useful,-
14but WITHOUT ANY WARRANTY; without even the implied warranty of-
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
16GNU General Public License for more details.-
17-
18You should have received a copy of the GNU General Public License-
19along with Bash. If not, see <http://www.gnu.org/licenses/>.-
20-
21$PRODUCES ulimit.c-
22-
23$BUILTIN ulimit-
24$FUNCTION ulimit_builtin-
25$DEPENDS_ON !_MINIX-
26$SHORT_DOC ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]-
27Modify shell resource limits.-
28-
29Provides control over the resources available to the shell and processes-
30it creates, on systems that allow such control.-
31-
32Options:-
33 -S use the `soft' resource limit-
34 -H use the `hard' resource limit-
35 -a all current limits are reported-
36 -b the socket buffer size-
37 -c the maximum size of core files created-
38 -d the maximum size of a process's data segment-
39 -e the maximum scheduling priority (`nice')-
40 -f the maximum size of files written by the shell and its children-
41 -i the maximum number of pending signals-
42 -k the maximum number of kqueues allocated for this process-
43 -l the maximum size a process may lock into memory-
44 -m the maximum resident set size-
45 -n the maximum number of open file descriptors-
46 -p the pipe buffer size-
47 -q the maximum number of bytes in POSIX message queues-
48 -r the maximum real-time scheduling priority-
49 -s the maximum stack size-
50 -t the maximum amount of cpu time in seconds-
51 -u the maximum number of user processes-
52 -v the size of virtual memory-
53 -x the maximum number of file locks-
54 -P the maximum number of pseudoterminals-
55 -T the maximum number of threads-
56-
57Not all options are available on all platforms.-
58-
59If LIMIT is given, it is the new value of the specified resource; the-
60special LIMIT values `soft', `hard', and `unlimited' stand for the-
61current soft limit, the current hard limit, and no limit, respectively.-
62Otherwise, the current value of the specified resource is printed. If-
63no option is given, then -f is assumed.-
64-
65Values are in 1024-byte increments, except for -t, which is in seconds,-
66-p, which is in increments of 512 bytes, and -u, which is an unscaled-
67number of processes.-
68-
69Exit Status:-
70Returns success unless an invalid option is supplied or an error occurs.-
71$END-
72-
73#if !defined (_MINIX)-
74-
75#include <config.h>-
76-
77#include "../bashtypes.h"-
78#if defined (HAVE_SYS_PARAM_H)-
79# include <sys/param.h>-
80#endif-
81-
82#if defined (HAVE_UNISTD_H)-
83# include <unistd.h>-
84#endif-
85-
86#include <stdio.h>-
87#include <errno.h>-
88-
89#include "../bashintl.h"-
90-
91#include "../shell.h"-
92#include "common.h"-
93#include "bashgetopt.h"-
94#include "pipesize.h"-
95-
96#if !defined (errno)-
97extern int errno;-
98#endif-
99-
100/* For some reason, HPUX chose to make these definitions visible only if-
101 _KERNEL is defined, so we define _KERNEL before including <sys/resource.h>-
102 and #undef it afterward. */-
103#if defined (HAVE_RESOURCE)-
104# include <sys/time.h>-
105# if defined (HPUX) && defined (RLIMIT_NEEDS_KERNEL)-
106# define _KERNEL-
107# endif-
108# include <sys/resource.h>-
109# if defined (HPUX) && defined (RLIMIT_NEEDS_KERNEL)-
110# undef _KERNEL-
111# endif-
112#elif defined (HAVE_SYS_TIMES_H)-
113# include <sys/times.h>-
114#endif-
115-
116#if defined (HAVE_LIMITS_H)-
117# include <limits.h>-
118#endif-
119-
120/* Check for the most basic symbols. If they aren't present, this-
121 system's <sys/resource.h> isn't very useful to us. */-
122#if !defined (RLIMIT_FSIZE) || !defined (HAVE_GETRLIMIT)-
123# undef HAVE_RESOURCE-
124#endif-
125-
126#if !defined (HAVE_RESOURCE) && defined (HAVE_ULIMIT_H)-
127# include <ulimit.h>-
128#endif-
129-
130#if !defined (RLIMTYPE)-
131# define RLIMTYPE long-
132# define string_to_rlimtype(s) strtol(s, (char **)NULL, 10)-
133# define print_rlimtype(num, nl) printf ("%ld%s", num, nl ? "\n" : "")-
134#endif-
135-
136/* Alternate names */-
137-
138/* Some systems use RLIMIT_NOFILE, others use RLIMIT_OFILE */-
139#if defined (HAVE_RESOURCE) && defined (RLIMIT_OFILE) && !defined (RLIMIT_NOFILE)-
140# define RLIMIT_NOFILE RLIMIT_OFILE-
141#endif /* HAVE_RESOURCE && RLIMIT_OFILE && !RLIMIT_NOFILE */-
142-
143#if defined (HAVE_RESOURCE) && defined (RLIMIT_POSIXLOCKS) && !defined (RLIMIT_LOCKS)-
144# define RLIMIT_LOCKS RLIMIT_POSIXLOCKS-
145#endif /* HAVE_RESOURCE && RLIMIT_POSIXLOCKS && !RLIMIT_LOCKS */-
146-
147/* Some systems have these, some do not. */-
148#ifdef RLIMIT_FSIZE-
149# define RLIMIT_FILESIZE RLIMIT_FSIZE-
150#else-
151# define RLIMIT_FILESIZE 256-
152#endif-
153-
154#define RLIMIT_PIPESIZE 257-
155-
156#ifdef RLIMIT_NOFILE-
157# define RLIMIT_OPENFILES RLIMIT_NOFILE-
158#else-
159# define RLIMIT_OPENFILES 258-
160#endif-
161-
162#ifdef RLIMIT_VMEM-
163# define RLIMIT_VIRTMEM RLIMIT_VMEM-
164# define RLIMIT_VMBLKSZ 1024-
165#else-
166# ifdef RLIMIT_AS-
167# define RLIMIT_VIRTMEM RLIMIT_AS-
168# define RLIMIT_VMBLKSZ 1024-
169# else-
170# define RLIMIT_VIRTMEM 259-
171# define RLIMIT_VMBLKSZ 1-
172# endif-
173#endif-
174-
175#ifdef RLIMIT_NPROC-
176# define RLIMIT_MAXUPROC RLIMIT_NPROC-
177#else-
178# define RLIMIT_MAXUPROC 260-
179#endif-
180-
181#if !defined (RLIMIT_PTHREAD) && defined (RLIMIT_NTHR)-
182# define RLIMIT_PTHREAD RLIMIT_NTHR-
183#endif-
184-
185#if !defined (RLIM_INFINITY)-
186# define RLIM_INFINITY 0x7fffffff-
187#endif-
188-
189#if !defined (RLIM_SAVED_CUR)-
190# define RLIM_SAVED_CUR RLIM_INFINITY-
191#endif-
192-
193#if !defined (RLIM_SAVED_MAX)-
194# define RLIM_SAVED_MAX RLIM_INFINITY-
195#endif-
196-
197#define LIMIT_HARD 0x01-
198#define LIMIT_SOFT 0x02-
199-
200/* "Blocks" are defined as 512 bytes when in Posix mode and 1024 bytes-
201 otherwise. */-
202#define POSIXBLK -2-
203-
204#define BLOCKSIZE(x) (((x) == POSIXBLK) ? (posixly_correct ? 512 : 1024) : (x))-
205-
206static int _findlim __P((int));-
207-
208static int ulimit_internal __P((int, char *, int, int));-
209-
210static int get_limit __P((int, RLIMTYPE *, RLIMTYPE *));-
211static int set_limit __P((int, RLIMTYPE, int));-
212-
213static void printone __P((int, RLIMTYPE, int));-
214static void print_all_limits __P((int));-
215-
216static int set_all_limits __P((int, RLIMTYPE));-
217-
218static int filesize __P((RLIMTYPE *));-
219static int pipesize __P((RLIMTYPE *));-
220static int getmaxuprc __P((RLIMTYPE *));-
221static int getmaxvm __P((RLIMTYPE *, RLIMTYPE *));-
222-
223typedef struct {-
224 int option; /* The ulimit option for this limit. */-
225 int parameter; /* Parameter to pass to get_limit (). */-
226 int block_factor; /* Blocking factor for specific limit. */-
227 const char * const description; /* Descriptive string to output. */-
228 const char * const units; /* scale */-
229} RESOURCE_LIMITS;-
230-
231static RESOURCE_LIMITS limits[] = {-
232#ifdef RLIMIT_NPTS-
233 { 'P', RLIMIT_NPTS, 1, "number of pseudoterminals", (char *)NULL },-
234#endif-
235#ifdef RLIMIT_PTHREAD-
236 { 'T', RLIMIT_PTHREAD, 1, "number of threads", (char *)NULL },-
237#endif-
238#ifdef RLIMIT_SBSIZE-
239 { 'b', RLIMIT_SBSIZE, 1, "socket buffer size", "bytes" },-
240#endif-
241#ifdef RLIMIT_CORE-
242 { 'c', RLIMIT_CORE, POSIXBLK, "core file size", "blocks" },-
243#endif-
244#ifdef RLIMIT_DATA-
245 { 'd', RLIMIT_DATA, 1024, "data seg size", "kbytes" },-
246#endif-
247#ifdef RLIMIT_NICE-
248 { 'e', RLIMIT_NICE, 1, "scheduling priority", (char *)NULL },-
249#endif-
250 { 'f', RLIMIT_FILESIZE, POSIXBLK, "file size", "blocks" },-
251#ifdef RLIMIT_SIGPENDING-
252 { 'i', RLIMIT_SIGPENDING, 1, "pending signals", (char *)NULL },-
253#endif-
254#ifdef RLIMIT_KQUEUES-
255 { 'k', RLIMIT_KQUEUES, 1, "max kqueues", (char *)NULL },-
256#endif-
257#ifdef RLIMIT_MEMLOCK-
258 { 'l', RLIMIT_MEMLOCK, 1024, "max locked memory", "kbytes" },-
259#endif-
260#ifdef RLIMIT_RSS-
261 { 'm', RLIMIT_RSS, 1024, "max memory size", "kbytes" },-
262#endif /* RLIMIT_RSS */-
263 { 'n', RLIMIT_OPENFILES, 1, "open files", (char *)NULL},-
264 { 'p', RLIMIT_PIPESIZE, 512, "pipe size", "512 bytes" },-
265#ifdef RLIMIT_MSGQUEUE-
266 { 'q', RLIMIT_MSGQUEUE, 1, "POSIX message queues", "bytes" },-
267#endif-
268#ifdef RLIMIT_RTPRIO-
269 { 'r', RLIMIT_RTPRIO, 1, "real-time priority", (char *)NULL },-
270#endif-
271#ifdef RLIMIT_STACK-
272 { 's', RLIMIT_STACK, 1024, "stack size", "kbytes" },-
273#endif-
274#ifdef RLIMIT_CPU-
275 { 't', RLIMIT_CPU, 1, "cpu time", "seconds" },-
276#endif /* RLIMIT_CPU */-
277 { 'u', RLIMIT_MAXUPROC, 1, "max user processes", (char *)NULL },-
278#if defined (HAVE_RESOURCE)-
279 { 'v', RLIMIT_VIRTMEM, RLIMIT_VMBLKSZ, "virtual memory", "kbytes" },-
280#endif-
281#ifdef RLIMIT_SWAP-
282 { 'w', RLIMIT_SWAP, 1024, "swap size", "kbytes" },-
283#endif-
284#ifdef RLIMIT_LOCKS-
285 { 'x', RLIMIT_LOCKS, 1, "file locks", (char *)NULL },-
286#endif-
287 { -1, -1, -1, (char *)NULL, (char *)NULL }-
288};-
289#define NCMDS (sizeof(limits) / sizeof(limits[0]))-
290-
291typedef struct _cmd {-
292 int cmd;-
293 char *arg;-
294} ULCMD;-
295-
296static ULCMD *cmdlist;-
297static int ncmd;-
298static int cmdlistsz;-
299-
300#if !defined (HAVE_RESOURCE) && !defined (HAVE_ULIMIT)-
301long-
302ulimit (cmd, newlim)-
303 int cmd;-
304 long newlim;-
305{-
306 errno = EINVAL;-
307 return -1;-
308}-
309#endif /* !HAVE_RESOURCE && !HAVE_ULIMIT */-
310-
311static int-
312_findlim (opt)-
313 int opt;-
314{-
315 register int i;-
316-
317 for (i = 0; limits[i].option > 0; i++)
limits[i].option > 0Description
TRUEevaluated 3748 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-3748
318 if (limits[i].option == opt)
limits[i].option == optDescription
TRUEevaluated 486 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3262 times by 1 test
Evaluated by:
  • Self test
486-3262
319 return i;
executed 486 times by 1 test: return i;
Executed by:
  • Self test
486
320 return -1;
never executed: return -1;
0
321}-
322-
323static char optstring[4 + 2 * NCMDS];-
324-
325/* Report or set limits associated with certain per-process resources.-
326 See the help documentation in builtins.c for a full description. */-
327int-
328ulimit_builtin (list)-
329 register WORD_LIST *list;-
330{-
331 register char *s;-
332 int c, limind, mode, opt, all_limits;-
333-
334 mode = 0;-
335-
336 all_limits = 0;-
337-
338 /* Idea stolen from pdksh -- build option string the first time called. */-
339 if (optstring[0] == 0)
optstring[0] == 0Description
TRUEevaluated 242 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-242
340 {-
341 s = optstring;-
342 *s++ = 'a'; *s++ = 'S'; *s++ = 'H';-
343 for (c = 0; limits[c].option > 0; c++)
limits[c].option > 0Description
TRUEevaluated 3872 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 242 times by 1 test
Evaluated by:
  • Self test
242-3872
344 {-
345 *s++ = limits[c].option;-
346 *s++ = ';';-
347 }
executed 3872 times by 1 test: end of block
Executed by:
  • Self test
3872
348 *s = '\0';-
349 }
executed 242 times by 1 test: end of block
Executed by:
  • Self test
242
350-
351 /* Initialize the command list. */-
352 if (cmdlistsz == 0)
cmdlistsz == 0Description
TRUEevaluated 242 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-242
353 cmdlist = (ULCMD *)xmalloc ((cmdlistsz = 16) * sizeof (ULCMD));
executed 242 times by 1 test: cmdlist = (ULCMD *)sh_xmalloc(((cmdlistsz = 16) * sizeof (ULCMD)), "./ulimit.def", 353);
Executed by:
  • Self test
242
354 ncmd = 0;-
355-
356 reset_internal_getopt ();-
357 while ((opt = internal_getopt (list, optstring)) != -1)
(opt = interna...string)) != -1Description
TRUEevaluated 243 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
243
358 {-
359 switch (opt)-
360 {-
361 case 'a':
never executed: case 'a':
0
362 all_limits++;-
363 break;
never executed: break;
0
364-
365 /* -S and -H are modifiers, not real options. */-
366 case 'S':
never executed: case 'S':
0
367 mode |= LIMIT_SOFT;-
368 break;
never executed: break;
0
369-
370 case 'H':
never executed: case 'H':
0
371 mode |= LIMIT_HARD;-
372 break;
never executed: break;
0
373-
374 CASE_HELPOPT;
never executed: return (258);
never executed: case -99:
0
375 case '?':
never executed: case '?':
0
376 builtin_usage ();-
377 return (EX_USAGE);
never executed: return (258);
0
378-
379 default:
executed 243 times by 1 test: default:
Executed by:
  • Self test
243
380 if (ncmd >= cmdlistsz)
ncmd >= cmdlistszDescription
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
381 cmdlist = (ULCMD *)xrealloc (cmdlist, (cmdlistsz *= 2) * sizeof (ULCMD));
never executed: cmdlist = (ULCMD *)sh_xrealloc((cmdlist), ((cmdlistsz *= 2) * sizeof (ULCMD)), "./ulimit.def", 381);
0
382 cmdlist[ncmd].cmd = opt;-
383 cmdlist[ncmd++].arg = list_optarg;-
384 break;
executed 243 times by 1 test: break;
Executed by:
  • Self test
243
385 }-
386 }-
387 list = loptend;-
388-
389 if (all_limits)
all_limitsDescription
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
390 {-
391#ifdef NOTYET-
392 if (list) /* setting */-
393 {-
394 if (STREQ (list->word->word, "unlimited") == 0)-
395 {-
396 builtin_error (_("%s: invalid limit argument"), list->word->word);-
397 return (EXECUTION_FAILURE);-
398 }-
399 return (set_all_limits (mode == 0 ? LIMIT_SOFT|LIMIT_HARD : mode, RLIM_INFINITY));-
400 }-
401#endif-
402 print_all_limits (mode == 0 ? LIMIT_SOFT : mode);-
403 return (sh_chkwrite (EXECUTION_SUCCESS));
never executed: return (sh_chkwrite (0));
0
404 }-
405-
406 /* default is `ulimit -f' */-
407 if (ncmd == 0)
ncmd == 0Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
408 {-
409 cmdlist[ncmd].cmd = 'f';-
410 /* `ulimit something' is same as `ulimit -f something' */-
411 cmdlist[ncmd++].arg = list ? list->word->word : (char *)NULL;
listDescription
TRUEnever evaluated
FALSEnever evaluated
0
412 if (list)
listDescription
TRUEnever evaluated
FALSEnever evaluated
0
413 list = list->next;
never executed: list = list->next;
0
414 }
never executed: end of block
0
415-
416 /* verify each command in the list. */-
417 for (c = 0; c < ncmd; c++)
c < ncmdDescription
TRUEevaluated 243 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
243
418 {-
419 limind = _findlim (cmdlist[c].cmd);-
420 if (limind == -1)
limind == -1Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
421 {-
422 builtin_error (_("`%c': bad command"), cmdlist[c].cmd);-
423 return (EX_USAGE);
never executed: return (258);
0
424 }-
425 }
executed 243 times by 1 test: end of block
Executed by:
  • Self test
243
426-
427 for (c = 0; c < ncmd; c++)
c < ncmdDescription
TRUEevaluated 243 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
243
428 if (ulimit_internal (cmdlist[c].cmd, cmdlist[c].arg, mode, ncmd > 1) == EXECUTION_FAILURE)
ulimit_interna...ncmd > 1) == 1Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
429 return (EXECUTION_FAILURE);
never executed: return (1);
0
430-
431 return (EXECUTION_SUCCESS);
executed 243 times by 1 test: return (0);
Executed by:
  • Self test
243
432}-
433-
434static int-
435ulimit_internal (cmd, cmdarg, mode, multiple)-
436 int cmd;-
437 char *cmdarg;-
438 int mode, multiple;-
439{-
440 int opt, limind, setting;-
441 int block_factor;-
442 RLIMTYPE soft_limit, hard_limit, real_limit, limit;-
443-
444 setting = cmdarg != 0;-
445 limind = _findlim (cmd);-
446 if (mode == 0)
mode == 0Description
TRUEevaluated 243 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-243
447 mode = setting ? (LIMIT_HARD|LIMIT_SOFT) : LIMIT_SOFT;
executed 243 times by 1 test: mode = setting ? (0x01|0x02) : 0x02;
Executed by:
  • Self test
settingDescription
TRUEevaluated 241 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
2-243
448 opt = get_limit (limind, &soft_limit, &hard_limit);-
449 if (opt < 0)
opt < 0Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
450 {-
451 builtin_error (_("%s: cannot get limit: %s"), limits[limind].description,-
452 strerror (errno));-
453 return (EXECUTION_FAILURE);
never executed: return (1);
0
454 }-
455-
456 if (setting == 0) /* print the value of the specified limit */
setting == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
2-241
457 {-
458 printone (limind, (mode & LIMIT_SOFT) ? soft_limit : hard_limit, multiple);-
459 return (EXECUTION_SUCCESS);
executed 2 times by 1 test: return (0);
Executed by:
  • Self test
2
460 }-
461 -
462 /* Setting the limit. */-
463 if (STREQ (cmdarg, "hard"))
never executed: __result = (((const unsigned char *) (const char *) ( cmdarg ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "hard" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(cmdarg)[0] == ("hard")[0]Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-241
464 real_limit = hard_limit;
never executed: real_limit = hard_limit;
0
465 else if (STREQ (cmdarg, "soft"))
never executed: __result = (((const unsigned char *) (const char *) ( cmdarg ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "soft" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(cmdarg)[0] == ("soft")[0]Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-241
466 real_limit = soft_limit;
never executed: real_limit = soft_limit;
0
467 else if (STREQ (cmdarg, "unlimited"))
never executed: __result = (((const unsigned char *) (const char *) ( cmdarg ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "unlimited" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(cmdarg)[0] ==...unlimited")[0]Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-241
468 real_limit = RLIM_INFINITY;
never executed: real_limit = ((__rlim_t) -1) ;
0
469 else if (all_digits (cmdarg))
all_digits (cmdarg)Description
TRUEevaluated 241 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-241
470 {-
471 limit = string_to_rlimtype (cmdarg);-
472 block_factor = BLOCKSIZE(limits[limind].block_factor);
((limits[limin...factor) == -2)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 231 times by 1 test
Evaluated by:
  • Self test
posixly_correctDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
0-231
473 real_limit = limit * block_factor;-
474-
475 if ((real_limit / block_factor) != limit)
(real_limit / ...ctor) != limitDescription
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
0-241
476 {-
477 sh_erange (cmdarg, _("limit"));-
478 return (EXECUTION_FAILURE);
never executed: return (1);
0
479 }-
480 }
executed 241 times by 1 test: end of block
Executed by:
  • Self test
241
481 else-
482 {-
483 sh_invalidnum (cmdarg);-
484 return (EXECUTION_FAILURE);
never executed: return (1);
0
485 }-
486-
487 if (set_limit (limind, real_limit, mode) < 0)
set_limit (lim...mit, mode) < 0Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
0-241
488 {-
489 builtin_error (_("%s: cannot modify limit: %s"), limits[limind].description,-
490 strerror (errno));-
491 return (EXECUTION_FAILURE);
never executed: return (1);
0
492 }-
493-
494 return (EXECUTION_SUCCESS);
executed 241 times by 1 test: return (0);
Executed by:
  • Self test
241
495}-
496-
497static int-
498get_limit (ind, softlim, hardlim)-
499 int ind;-
500 RLIMTYPE *softlim, *hardlim;-
501{-
502 RLIMTYPE value;-
503#if defined (HAVE_RESOURCE)-
504 struct rlimit limit;-
505#endif-
506-
507 if (limits[ind].parameter >= 256)
limits[ind].parameter >= 256Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
508 {-
509 switch (limits[ind].parameter)-
510 {-
511 case RLIMIT_FILESIZE:
never executed: case RLIMIT_FSIZE :
0
512 if (filesize (&value) < 0)
filesize (&value) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
513 return -1;
never executed: return -1;
0
514 break;
never executed: break;
0
515 case RLIMIT_PIPESIZE:
never executed: case 257:
0
516 if (pipesize (&value) < 0)
pipesize (&value) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
517 return -1;
never executed: return -1;
0
518 break;
never executed: break;
0
519 case RLIMIT_OPENFILES:
never executed: case RLIMIT_NOFILE :
0
520 value = (RLIMTYPE)getdtablesize ();-
521 break;
never executed: break;
0
522 case RLIMIT_VIRTMEM:
never executed: case RLIMIT_AS :
0
523 return (getmaxvm (softlim, hardlim));
never executed: return (getmaxvm (softlim, hardlim));
0
524 case RLIMIT_MAXUPROC:
never executed: case __RLIMIT_NPROC :
0
525 if (getmaxuprc (&value) < 0)
getmaxuprc (&value) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
526 return -1;
never executed: return -1;
0
527 break;
never executed: break;
0
528 default:
never executed: default:
0
529 errno = EINVAL;-
530 return -1;
never executed: return -1;
0
531 }-
532 *softlim = *hardlim = value;-
533 return (0);
never executed: return (0);
0
534 }-
535 else-
536 {-
537#if defined (HAVE_RESOURCE)-
538 if (getrlimit (limits[ind].parameter, &limit) < 0)
getrlimit (lim...r, &limit) < 0Description
TRUEnever evaluated
FALSEevaluated 243 times by 1 test
Evaluated by:
  • Self test
0-243
539 return -1;
never executed: return -1;
0
540 *softlim = limit.rlim_cur;-
541 *hardlim = limit.rlim_max;-
542# if defined (HPUX9)-
543 if (limits[ind].parameter == RLIMIT_FILESIZE)-
544 {-
545 *softlim *= 512;-
546 *hardlim *= 512; /* Ugh. */-
547 }-
548 else-
549# endif /* HPUX9 */-
550 return 0;
executed 243 times by 1 test: return 0;
Executed by:
  • Self test
243
551#else-
552 errno = EINVAL;-
553 return -1;-
554#endif-
555 }-
556}-
557-
558static int-
559set_limit (ind, newlim, mode)-
560 int ind;-
561 RLIMTYPE newlim;-
562 int mode;-
563{-
564#if defined (HAVE_RESOURCE)-
565 struct rlimit limit;-
566 RLIMTYPE val;-
567#endif-
568-
569 if (limits[ind].parameter >= 256)
limits[ind].parameter >= 256Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
0-241
570 switch (limits[ind].parameter)-
571 {-
572 case RLIMIT_FILESIZE:
never executed: case RLIMIT_FSIZE :
0
573#if !defined (HAVE_RESOURCE)-
574 return (ulimit (2, newlim / 512L));-
575#else-
576 errno = EINVAL;-
577 return -1;
never executed: return -1;
0
578#endif-
579-
580 case RLIMIT_OPENFILES:
never executed: case RLIMIT_NOFILE :
0
581#if defined (HAVE_SETDTABLESIZE)-
582# if defined (__CYGWIN__)-
583 /* Grrr... Cygwin declares setdtablesize as void. */-
584 setdtablesize (newlim);-
585 return 0;-
586# else-
587 return (setdtablesize (newlim));-
588# endif-
589#endif-
590 case RLIMIT_PIPESIZE:
never executed: case 257:
0
591 case RLIMIT_VIRTMEM:
never executed: case RLIMIT_AS :
0
592 case RLIMIT_MAXUPROC:
never executed: case __RLIMIT_NPROC :
0
593 default:
never executed: default:
0
594 errno = EINVAL;-
595 return -1;
never executed: return -1;
0
596 }-
597 else-
598 {-
599#if defined (HAVE_RESOURCE)-
600 if (getrlimit (limits[ind].parameter, &limit) < 0)
getrlimit (lim...r, &limit) < 0Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
0-241
601 return -1;
never executed: return -1;
0
602# if defined (HPUX9)-
603 if (limits[ind].parameter == RLIMIT_FILESIZE)-
604 newlim /= 512; /* Ugh. */-
605# endif /* HPUX9 */-
606 val = (current_user.euid != 0 && newlim == RLIM_INFINITY &&
current_user.euid != 0Description
TRUEevaluated 241 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
newlim == ((__rlim_t) -1)Description
TRUEnever evaluated
FALSEevaluated 241 times by 1 test
Evaluated by:
  • Self test
0-241
607 (mode & LIMIT_HARD) == 0 && /* XXX -- test */
(mode & 0x01) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
608 (limit.rlim_cur <= limit.rlim_max))
(limit.rlim_cu...imit.rlim_max)Description
TRUEnever evaluated
FALSEnever evaluated
0
609 ? limit.rlim_max : newlim;-
610 if (mode & LIMIT_SOFT)
mode & 0x02Description
TRUEevaluated 241 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-241
611 limit.rlim_cur = val;
executed 241 times by 1 test: limit.rlim_cur = val;
Executed by:
  • Self test
241
612 if (mode & LIMIT_HARD)
mode & 0x01Description
TRUEevaluated 241 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-241
613 limit.rlim_max = val;
executed 241 times by 1 test: limit.rlim_max = val;
Executed by:
  • Self test
241
614 -
615 return (setrlimit (limits[ind].parameter, &limit));
executed 241 times by 1 test: return (setrlimit (limits[ind].parameter, &limit));
Executed by:
  • Self test
241
616#else-
617 errno = EINVAL;-
618 return -1;-
619#endif-
620 }-
621}-
622-
623static int-
624getmaxvm (softlim, hardlim)-
625 RLIMTYPE *softlim, *hardlim;-
626{-
627#if defined (HAVE_RESOURCE)-
628 struct rlimit datalim, stacklim;-
629-
630 if (getrlimit (RLIMIT_DATA, &datalim) < 0)
getrlimit ( RL... &datalim) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
631 return -1;
never executed: return -1;
0
632-
633 if (getrlimit (RLIMIT_STACK, &stacklim) < 0)
getrlimit ( RL...&stacklim) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
634 return -1;
never executed: return -1;
0
635-
636 /* Protect against overflow. */-
637 *softlim = (datalim.rlim_cur / 1024L) + (stacklim.rlim_cur / 1024L);-
638 *hardlim = (datalim.rlim_max / 1024L) + (stacklim.rlim_max / 1024L);-
639 return 0;
never executed: return 0;
0
640#else-
641 errno = EINVAL;-
642 return -1;-
643#endif /* HAVE_RESOURCE */-
644}-
645-
646static int-
647filesize(valuep)-
648 RLIMTYPE *valuep;-
649{-
650#if !defined (HAVE_RESOURCE)-
651 long result;-
652 if ((result = ulimit (1, 0L)) < 0)-
653 return -1;-
654 else-
655 *valuep = (RLIMTYPE) result * 512;-
656 return 0;-
657#else-
658 errno = EINVAL;-
659 return -1;
never executed: return -1;
0
660#endif-
661}-
662-
663static int-
664pipesize (valuep)-
665 RLIMTYPE *valuep;-
666{-
667#if defined (PIPE_BUF)-
668 /* This is defined on Posix systems. */-
669 *valuep = (RLIMTYPE) PIPE_BUF;-
670 return 0;
never executed: return 0;
0
671#else-
672# if defined (_POSIX_PIPE_BUF)-
673 *valuep = (RLIMTYPE) _POSIX_PIPE_BUF;-
674 return 0;-
675# else-
676# if defined (PIPESIZE)-
677 /* This is defined by running a program from the Makefile. */-
678 *valuep = (RLIMTYPE) PIPESIZE;-
679 return 0;-
680# else-
681 errno = EINVAL;-
682 return -1; -
683# endif /* PIPESIZE */-
684# endif /* _POSIX_PIPE_BUF */-
685#endif /* PIPE_BUF */-
686}-
687-
688static int-
689getmaxuprc (valuep)-
690 RLIMTYPE *valuep;-
691{-
692 long maxchild;-
693-
694 maxchild = getmaxchild ();-
695 if (maxchild < 0)
maxchild < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
696 {-
697 errno = EINVAL;-
698 return -1;
never executed: return -1;
0
699 }-
700 else-
701 {-
702 *valuep = (RLIMTYPE) maxchild;-
703 return 0;
never executed: return 0;
0
704 }-
705}-
706-
707static void-
708print_all_limits (mode)-
709 int mode;-
710{-
711 register int i;-
712 RLIMTYPE softlim, hardlim;-
713-
714 if (mode == 0)
mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
715 mode |= LIMIT_SOFT;
never executed: mode |= 0x02;
0
716-
717 for (i = 0; limits[i].option > 0; i++)
limits[i].option > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
718 {-
719 if (get_limit (i, &softlim, &hardlim) == 0)
get_limit (i, ...&hardlim) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
720 printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
never executed: printone (i, (mode & 0x02) ? softlim : hardlim, 1);
0
721 else if (errno != EINVAL)
(*__errno_location ()) != 22Description
TRUEnever evaluated
FALSEnever evaluated
0
722 builtin_error ("%s: cannot get limit: %s", limits[i].description,
never executed: builtin_error ("%s: cannot get limit: %s", limits[i].description, strerror ( (*__errno_location ()) ));
0
723 strerror (errno));
never executed: builtin_error ("%s: cannot get limit: %s", limits[i].description, strerror ( (*__errno_location ()) ));
0
724 }
never executed: end of block
0
725}
never executed: end of block
0
726-
727static void-
728printone (limind, curlim, pdesc)-
729 int limind;-
730 RLIMTYPE curlim;-
731 int pdesc;-
732{-
733 char unitstr[64];-
734 int factor;-
735-
736 factor = BLOCKSIZE(limits[limind].block_factor);
((limits[limin...factor) == -2)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
posixly_correctDescription
TRUEnever evaluated
FALSEnever evaluated
0-2
737 if (pdesc)
pdescDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
738 {-
739 if (limits[limind].units)
limits[limind].unitsDescription
TRUEnever evaluated
FALSEnever evaluated
0
740 sprintf (unitstr, "(%s, -%c) ", limits[limind].units, limits[limind].option);
never executed: sprintf (unitstr, "(%s, -%c) ", limits[limind].units, limits[limind].option);
0
741 else-
742 sprintf (unitstr, "(-%c) ", limits[limind].option);
never executed: sprintf (unitstr, "(-%c) ", limits[limind].option);
0
743-
744 printf ("%-20s %16s", limits[limind].description, unitstr);-
745 }
never executed: end of block
0
746 if (curlim == RLIM_INFINITY)
curlim == ((__rlim_t) -1)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
747 puts ("unlimited");
never executed: puts ("unlimited");
0
748 else if (curlim == RLIM_SAVED_MAX)
curlim == ((__rlim_t) -1)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
749 puts ("hard");
never executed: puts ("hard");
0
750 else if (curlim == RLIM_SAVED_CUR)
curlim == ((__rlim_t) -1)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
751 puts ("soft");
never executed: puts ("soft");
0
752 else-
753 print_rlimtype ((curlim / factor), 1);
executed 2 times by 1 test: print_rlimtype ((curlim / factor), 1);
Executed by:
  • Self test
2
754}-
755-
756/* Set all limits to NEWLIM. NEWLIM currently must be RLIM_INFINITY, which-
757 causes all limits to be set as high as possible depending on mode (like-
758 csh `unlimit'). Returns -1 if NEWLIM is invalid, 0 if all limits-
759 were set successfully, and 1 if at least one limit could not be set.-
760-
761 To raise all soft limits to their corresponding hard limits, use-
762 ulimit -S -a unlimited-
763 To attempt to raise all hard limits to infinity (superuser-only), use-
764 ulimit -H -a unlimited-
765 To attempt to raise all soft and hard limits to infinity, use-
766 ulimit -a unlimited-
767*/-
768-
769static int-
770set_all_limits (mode, newlim)-
771 int mode;-
772 RLIMTYPE newlim;-
773{-
774 register int i;-
775 int retval = 0;-
776-
777 if (newlim != RLIM_INFINITY)
newlim != ((__rlim_t) -1)Description
TRUEnever evaluated
FALSEnever evaluated
0
778 {-
779 errno = EINVAL;-
780 return -1;
never executed: return -1;
0
781 }-
782 -
783 if (mode == 0)
mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
784 mode = LIMIT_SOFT|LIMIT_HARD;
never executed: mode = 0x02|0x01;
0
785-
786 for (retval = i = 0; limits[i].option > 0; i++)
limits[i].option > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
787 if (set_limit (i, newlim, mode) < 0)
set_limit (i, ...lim, mode) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
788 {-
789 builtin_error (_("%s: cannot modify limit: %s"), limits[i].description,-
790 strerror (errno));-
791 retval = 1;-
792 }
never executed: end of block
0
793 return retval;
never executed: return retval;
0
794}-
795-
796#endif /* !_MINIX */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2