1*4887Schin /***********************************************************************
2*4887Schin *                                                                      *
3*4887Schin *               This software is part of the ast package               *
4*4887Schin *           Copyright (c) 1982-2007 AT&T Knowledge Ventures            *
5*4887Schin *                      and is licensed under the                       *
6*4887Schin *                  Common Public License, Version 1.0                  *
7*4887Schin *                      by AT&T Knowledge Ventures                      *
8*4887Schin *                                                                      *
9*4887Schin *                A copy of the License is available at                 *
10*4887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
11*4887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12*4887Schin *                                                                      *
13*4887Schin *              Information and Software Systems Research               *
14*4887Schin *                            AT&T Research                             *
15*4887Schin *                           Florham Park NJ                            *
16*4887Schin *                                                                      *
17*4887Schin *                  David Korn <dgk@research.att.com>                   *
18*4887Schin *                                                                      *
19*4887Schin ***********************************************************************/
20*4887Schin #pragma prototyped
21*4887Schin #ifndef _ULIMIT_H
22*4887Schin #define _ULIMIT_H 1
23*4887Schin /*
24*4887Schin  * This is for the ulimit built-in command
25*4887Schin  */
26*4887Schin 
27*4887Schin #include	"FEATURE/time"
28*4887Schin #include	"FEATURE/rlimits"
29*4887Schin #if defined(_sys_resource) && defined(_lib_getrlimit)
30*4887Schin #   include	<sys/resource.h>
31*4887Schin #   if !defined(RLIMIT_FSIZE) && defined(_sys_vlimit)
32*4887Schin 	/* This handles hp/ux problem */
33*4887Schin #	include	<sys/vlimit.h>
34*4887Schin #	define RLIMIT_FSIZE	(LIM_FSIZE-1)
35*4887Schin #	define RLIMIT_DATA	(LIM_DATA-1)
36*4887Schin #	define RLIMIT_STACK	(LIM_STACK-1)
37*4887Schin #	define RLIMIT_CORE	(LIM_CORE-1)
38*4887Schin #	define RLIMIT_CPU	(LIM_CPU-1)
39*4887Schin #	ifdef LIM_MAXRSS
40*4887Schin #		define RLIMIT_RSS       (LIM_MAXRSS-1)
41*4887Schin #	endif /* LIM_MAXRSS */
42*4887Schin #   endif
43*4887Schin #   undef _lib_ulimit
44*4887Schin #else
45*4887Schin #   ifdef _sys_vlimit
46*4887Schin #	include	<sys/vlimit.h>
47*4887Schin #	undef _lib_ulimit
48*4887Schin #	define RLIMIT_FSIZE	LIM_FSIZE
49*4887Schin #	define RLIMIT_DATA	LIM_DATA
50*4887Schin #	define RLIMIT_STACK	LIM_STACK
51*4887Schin #	define RLIMIT_CORE	LIM_CORE
52*4887Schin #	define RLIMIT_CPU	LIM_CPU
53*4887Schin #	ifdef LIM_MAXRSS
54*4887Schin #		define RLIMIT_RSS       LIM_MAXRSS
55*4887Schin #	endif /* LIM_MAXRSS */
56*4887Schin #   else
57*4887Schin #	ifdef _lib_ulimit
58*4887Schin #	    define vlimit ulimit
59*4887Schin #	endif /* _lib_ulimit */
60*4887Schin #   endif /* _lib_vlimit */
61*4887Schin #endif
62*4887Schin 
63*4887Schin #ifdef RLIM_INFINITY
64*4887Schin #   define INFINITY	RLIM_INFINITY
65*4887Schin #else
66*4887Schin #   ifndef INFINITY
67*4887Schin #	define INFINITY	((rlim_t)-1L)
68*4887Schin #   endif /* INFINITY */
69*4887Schin #endif /* RLIM_INFINITY */
70*4887Schin 
71*4887Schin #if defined(_lib_getrlimit) || defined(_lib_vlimit) || defined(_lib_ulimit)
72*4887Schin #   ifndef RLIMIT_CPU
73*4887Schin #	define RLIMIT_CPU	0
74*4887Schin #   endif /* !RLIMIT_CPU */
75*4887Schin #   ifndef RLIMIT_DATA
76*4887Schin #	define RLIMIT_DATA	0
77*4887Schin #   endif /* !RLIMIT_DATA */
78*4887Schin #   ifndef RLIMIT_RSS
79*4887Schin #	define RLIMIT_RSS	0
80*4887Schin #   endif /* !RLIMIT_RSS */
81*4887Schin #   ifndef RLIMIT_STACK
82*4887Schin #	define RLIMIT_STACK	0
83*4887Schin #   endif /* !RLIMIT_STACK */
84*4887Schin #   ifndef RLIMIT_CORE
85*4887Schin #	define RLIMIT_CORE	0
86*4887Schin #   endif /* !RLIMIT_CORE */
87*4887Schin #   ifndef RLIMIT_VMEM
88*4887Schin #	define RLIMIT_VMEM	0
89*4887Schin #   endif /* !RLIMIT_VMEM */
90*4887Schin #   ifndef RLIMIT_NOFILE
91*4887Schin #	define RLIMIT_NOFILE	0
92*4887Schin #   endif /* !RLIMIT_NOFILE */
93*4887Schin #else
94*4887Schin #   define _no_ulimit
95*4887Schin #endif
96*4887Schin #ifndef _typ_rlim_t
97*4887Schin     typedef long rlim_t;
98*4887Schin #endif
99*4887Schin 
100*4887Schin #if !defined(RLIMIT_NOFILE) && defined(RLIMIT_OFILE)
101*4887Schin #define RLIMIT_NOFILE	RLIMIT_OFILE
102*4887Schin #endif
103*4887Schin 
104*4887Schin #ifndef RLIMIT_UNKNOWN
105*4887Schin #define RLIMIT_UNKNOWN	(-9999)
106*4887Schin #endif
107*4887Schin #ifndef RLIMIT_AS
108*4887Schin #define RLIMIT_AS	RLIMIT_UNKNOWN
109*4887Schin #endif
110*4887Schin #ifndef RLIMIT_CORE
111*4887Schin #define RLIMIT_CORE	RLIMIT_UNKNOWN
112*4887Schin #endif
113*4887Schin #ifndef RLIMIT_CPU
114*4887Schin #define RLIMIT_CPU	RLIMIT_UNKNOWN
115*4887Schin #endif
116*4887Schin #ifndef RLIMIT_DATA
117*4887Schin #define RLIMIT_DATA	RLIMIT_UNKNOWN
118*4887Schin #endif
119*4887Schin #ifndef RLIMIT_FSIZE
120*4887Schin #define RLIMIT_FSIZE	RLIMIT_UNKNOWN
121*4887Schin #endif
122*4887Schin #ifndef RLIMIT_LOCKS
123*4887Schin #define RLIMIT_LOCKS	RLIMIT_UNKNOWN
124*4887Schin #endif
125*4887Schin #ifndef RLIMIT_MEMLOCK
126*4887Schin #define RLIMIT_MEMLOCK	RLIMIT_UNKNOWN
127*4887Schin #endif
128*4887Schin #ifndef RLIMIT_NOFILE
129*4887Schin #define RLIMIT_NOFILE	RLIMIT_UNKNOWN
130*4887Schin #endif
131*4887Schin #ifndef RLIMIT_NPROC
132*4887Schin #define RLIMIT_NPROC	RLIMIT_UNKNOWN
133*4887Schin #endif
134*4887Schin #ifndef RLIMIT_PIPE
135*4887Schin #define RLIMIT_PIPE	RLIMIT_UNKNOWN
136*4887Schin #endif
137*4887Schin #ifndef RLIMIT_RSS
138*4887Schin #define RLIMIT_RSS	RLIMIT_UNKNOWN
139*4887Schin #endif
140*4887Schin #ifndef RLIMIT_SBSIZE
141*4887Schin #define RLIMIT_SBSIZE	RLIMIT_UNKNOWN
142*4887Schin #endif
143*4887Schin #ifndef RLIMIT_STACK
144*4887Schin #define RLIMIT_STACK	RLIMIT_UNKNOWN
145*4887Schin #endif
146*4887Schin #ifndef RLIMIT_PTHREAD
147*4887Schin #define RLIMIT_PTHREAD	RLIMIT_UNKNOWN
148*4887Schin #endif
149*4887Schin #ifndef RLIMIT_VMEM
150*4887Schin #define RLIMIT_VMEM	RLIMIT_UNKNOWN
151*4887Schin #endif
152*4887Schin 
153*4887Schin #define LIM_COUNT	0
154*4887Schin #define LIM_BLOCK	1
155*4887Schin #define LIM_BYTE	2
156*4887Schin #define LIM_KBYTE	3
157*4887Schin #define LIM_SECOND	4
158*4887Schin 
159*4887Schin typedef struct Limit_s
160*4887Schin {
161*4887Schin 	const char	name[8];
162*4887Schin 	const char*	description;
163*4887Schin 	int		index;
164*4887Schin 	const char*	conf;
165*4887Schin 	unsigned char	option;
166*4887Schin 	unsigned char	type;
167*4887Schin } Limit_t;
168*4887Schin 
169*4887Schin extern const Limit_t	shtab_limits[];
170*4887Schin extern const int	shtab_units[];
171*4887Schin 
172*4887Schin extern const char	e_unlimited[];
173*4887Schin extern const char*	e_units[];
174*4887Schin 
175*4887Schin #endif /* _ULIMIT_H */
176