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