1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1982-2010 AT&T Intellectual Property          *
5*                      and is licensed under the                       *
6*                  Common Public License, Version 1.0                  *
7*                    by AT&T Intellectual Property                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*            http://www.opensource.org/licenses/cpl1.0.txt             *
11*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
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_CPU
73#	define RLIMIT_CPU	0
74#   endif /* !RLIMIT_CPU */
75#   ifndef RLIMIT_DATA
76#	define RLIMIT_DATA	0
77#   endif /* !RLIMIT_DATA */
78#   ifndef RLIMIT_RSS
79#	define RLIMIT_RSS	0
80#   endif /* !RLIMIT_RSS */
81#   ifndef RLIMIT_STACK
82#	define RLIMIT_STACK	0
83#   endif /* !RLIMIT_STACK */
84#   ifndef RLIMIT_CORE
85#	define RLIMIT_CORE	0
86#   endif /* !RLIMIT_CORE */
87#   ifndef RLIMIT_VMEM
88#	define RLIMIT_VMEM	0
89#   endif /* !RLIMIT_VMEM */
90#   ifndef RLIMIT_NOFILE
91#	define RLIMIT_NOFILE	0
92#   endif /* !RLIMIT_NOFILE */
93#else
94#   define _no_ulimit
95#endif
96#ifndef _typ_rlim_t
97    typedef long rlim_t;
98#endif
99
100#if !defined(RLIMIT_NOFILE) && defined(RLIMIT_OFILE)
101#define RLIMIT_NOFILE	RLIMIT_OFILE
102#endif
103
104#ifndef RLIMIT_UNKNOWN
105#define RLIMIT_UNKNOWN	(-9999)
106#endif
107#ifndef RLIMIT_AS
108#define RLIMIT_AS	RLIMIT_UNKNOWN
109#endif
110#ifndef RLIMIT_CORE
111#define RLIMIT_CORE	RLIMIT_UNKNOWN
112#endif
113#ifndef RLIMIT_CPU
114#define RLIMIT_CPU	RLIMIT_UNKNOWN
115#endif
116#ifndef RLIMIT_DATA
117#define RLIMIT_DATA	RLIMIT_UNKNOWN
118#endif
119#ifndef RLIMIT_FSIZE
120#define RLIMIT_FSIZE	RLIMIT_UNKNOWN
121#endif
122#ifndef RLIMIT_LOCKS
123#define RLIMIT_LOCKS	RLIMIT_UNKNOWN
124#endif
125#ifndef RLIMIT_MEMLOCK
126#define RLIMIT_MEMLOCK	RLIMIT_UNKNOWN
127#endif
128#ifndef RLIMIT_NOFILE
129#define RLIMIT_NOFILE	RLIMIT_UNKNOWN
130#endif
131#ifndef RLIMIT_NPROC
132#define RLIMIT_NPROC	RLIMIT_UNKNOWN
133#endif
134#ifndef RLIMIT_PIPE
135#define RLIMIT_PIPE	RLIMIT_UNKNOWN
136#endif
137#ifndef RLIMIT_RSS
138#define RLIMIT_RSS	RLIMIT_UNKNOWN
139#endif
140#ifndef RLIMIT_SBSIZE
141#define RLIMIT_SBSIZE	RLIMIT_UNKNOWN
142#endif
143#ifndef RLIMIT_STACK
144#define RLIMIT_STACK	RLIMIT_UNKNOWN
145#endif
146#ifndef RLIMIT_PTHREAD
147#define RLIMIT_PTHREAD	RLIMIT_UNKNOWN
148#endif
149#ifndef RLIMIT_VMEM
150#define RLIMIT_VMEM	RLIMIT_UNKNOWN
151#endif
152
153#define LIM_COUNT	0
154#define LIM_BLOCK	1
155#define LIM_BYTE	2
156#define LIM_KBYTE	3
157#define LIM_SECOND	4
158
159typedef struct Limit_s
160{
161	const char	name[8];
162	const char*	description;
163	int		index;
164	const char*	conf;
165	unsigned char	option;
166	unsigned char	type;
167} Limit_t;
168
169extern const Limit_t	shtab_limits[];
170extern const int	shtab_units[];
171
172extern const char	e_unlimited[];
173extern const char*	e_units[];
174
175#endif /* _ULIMIT_H */
176