xref: /csrg-svn/lib/libcompat/4.1/vlimit.c (revision 13218)
1*13218Ssam /*	vlimit.c	4.1	83/06/20	*/
2*13218Ssam 
3*13218Ssam /*
4*13218Ssam  * (Almost) backwards compatible vlimit.
5*13218Ssam  */
6*13218Ssam #include <sys/resource.h>
7*13218Ssam 
8*13218Ssam /* LIM_NORAISE is not emulated */
9*13218Ssam #define	LIM_NORAISE	0	/* if <> 0, can't raise limits */
10*13218Ssam #define	LIM_CPU		1	/* max secs cpu time */
11*13218Ssam #define	LIM_FSIZE	2	/* max size of file created */
12*13218Ssam #define	LIM_DATA	3	/* max growth of data space */
13*13218Ssam #define	LIM_STACK	4	/* max growth of stack */
14*13218Ssam #define	LIM_CORE	5	/* max size of ``core'' file */
15*13218Ssam #define	LIM_MAXRSS	6	/* max desired data+stack core usage */
16*13218Ssam 
17*13218Ssam #define	NLIMITS		6
18*13218Ssam 
19*13218Ssam vlimit(limit, value)
20*13218Ssam 	int limit, value;
21*13218Ssam {
22*13218Ssam 	struct rlimit rlim;
23*13218Ssam 
24*13218Ssam 	if (limit <= 0 || limit > NLIMITS)
25*13218Ssam 		return (EINVAL);
26*13218Ssam 	if (value == -1) {
27*13218Ssam 		if (getrlimit(limit - 1, &rlim) < 0)
28*13218Ssam 			return (-1);
29*13218Ssam 		return (rlim.rlim_cur);
30*13218Ssam 	}
31*13218Ssam 	rlim.rlim_cur = value;
32*13218Ssam 	rlim.rlim_max = RLIM_INFINITY;
33*13218Ssam 	return (setrlimit(limit - 1, &rlim));
34*13218Ssam }
35