14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*8462SApril.Chin@Sun.COM *          Copyright (c) 1982-2008 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
7*8462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                  David Korn <dgk@research.att.com>                   *
184887Schin *                                                                      *
194887Schin ***********************************************************************/
204887Schin #pragma prototyped
214887Schin #ifndef _ULIMIT_H
224887Schin #define _ULIMIT_H 1
234887Schin /*
244887Schin  * This is for the ulimit built-in command
254887Schin  */
264887Schin 
274887Schin #include	"FEATURE/time"
284887Schin #include	"FEATURE/rlimits"
294887Schin #if defined(_sys_resource) && defined(_lib_getrlimit)
304887Schin #   include	<sys/resource.h>
314887Schin #   if !defined(RLIMIT_FSIZE) && defined(_sys_vlimit)
324887Schin 	/* This handles hp/ux problem */
334887Schin #	include	<sys/vlimit.h>
344887Schin #	define RLIMIT_FSIZE	(LIM_FSIZE-1)
354887Schin #	define RLIMIT_DATA	(LIM_DATA-1)
364887Schin #	define RLIMIT_STACK	(LIM_STACK-1)
374887Schin #	define RLIMIT_CORE	(LIM_CORE-1)
384887Schin #	define RLIMIT_CPU	(LIM_CPU-1)
394887Schin #	ifdef LIM_MAXRSS
404887Schin #		define RLIMIT_RSS       (LIM_MAXRSS-1)
414887Schin #	endif /* LIM_MAXRSS */
424887Schin #   endif
434887Schin #   undef _lib_ulimit
444887Schin #else
454887Schin #   ifdef _sys_vlimit
464887Schin #	include	<sys/vlimit.h>
474887Schin #	undef _lib_ulimit
484887Schin #	define RLIMIT_FSIZE	LIM_FSIZE
494887Schin #	define RLIMIT_DATA	LIM_DATA
504887Schin #	define RLIMIT_STACK	LIM_STACK
514887Schin #	define RLIMIT_CORE	LIM_CORE
524887Schin #	define RLIMIT_CPU	LIM_CPU
534887Schin #	ifdef LIM_MAXRSS
544887Schin #		define RLIMIT_RSS       LIM_MAXRSS
554887Schin #	endif /* LIM_MAXRSS */
564887Schin #   else
574887Schin #	ifdef _lib_ulimit
584887Schin #	    define vlimit ulimit
594887Schin #	endif /* _lib_ulimit */
604887Schin #   endif /* _lib_vlimit */
614887Schin #endif
624887Schin 
634887Schin #ifdef RLIM_INFINITY
644887Schin #   define INFINITY	RLIM_INFINITY
654887Schin #else
664887Schin #   ifndef INFINITY
674887Schin #	define INFINITY	((rlim_t)-1L)
684887Schin #   endif /* INFINITY */
694887Schin #endif /* RLIM_INFINITY */
704887Schin 
714887Schin #if defined(_lib_getrlimit) || defined(_lib_vlimit) || defined(_lib_ulimit)
724887Schin #   ifndef RLIMIT_CPU
734887Schin #	define RLIMIT_CPU	0
744887Schin #   endif /* !RLIMIT_CPU */
754887Schin #   ifndef RLIMIT_DATA
764887Schin #	define RLIMIT_DATA	0
774887Schin #   endif /* !RLIMIT_DATA */
784887Schin #   ifndef RLIMIT_RSS
794887Schin #	define RLIMIT_RSS	0
804887Schin #   endif /* !RLIMIT_RSS */
814887Schin #   ifndef RLIMIT_STACK
824887Schin #	define RLIMIT_STACK	0
834887Schin #   endif /* !RLIMIT_STACK */
844887Schin #   ifndef RLIMIT_CORE
854887Schin #	define RLIMIT_CORE	0
864887Schin #   endif /* !RLIMIT_CORE */
874887Schin #   ifndef RLIMIT_VMEM
884887Schin #	define RLIMIT_VMEM	0
894887Schin #   endif /* !RLIMIT_VMEM */
904887Schin #   ifndef RLIMIT_NOFILE
914887Schin #	define RLIMIT_NOFILE	0
924887Schin #   endif /* !RLIMIT_NOFILE */
934887Schin #else
944887Schin #   define _no_ulimit
954887Schin #endif
964887Schin #ifndef _typ_rlim_t
974887Schin     typedef long rlim_t;
984887Schin #endif
994887Schin 
1004887Schin #if !defined(RLIMIT_NOFILE) && defined(RLIMIT_OFILE)
1014887Schin #define RLIMIT_NOFILE	RLIMIT_OFILE
1024887Schin #endif
1034887Schin 
1044887Schin #ifndef RLIMIT_UNKNOWN
1054887Schin #define RLIMIT_UNKNOWN	(-9999)
1064887Schin #endif
1074887Schin #ifndef RLIMIT_AS
1084887Schin #define RLIMIT_AS	RLIMIT_UNKNOWN
1094887Schin #endif
1104887Schin #ifndef RLIMIT_CORE
1114887Schin #define RLIMIT_CORE	RLIMIT_UNKNOWN
1124887Schin #endif
1134887Schin #ifndef RLIMIT_CPU
1144887Schin #define RLIMIT_CPU	RLIMIT_UNKNOWN
1154887Schin #endif
1164887Schin #ifndef RLIMIT_DATA
1174887Schin #define RLIMIT_DATA	RLIMIT_UNKNOWN
1184887Schin #endif
1194887Schin #ifndef RLIMIT_FSIZE
1204887Schin #define RLIMIT_FSIZE	RLIMIT_UNKNOWN
1214887Schin #endif
1224887Schin #ifndef RLIMIT_LOCKS
1234887Schin #define RLIMIT_LOCKS	RLIMIT_UNKNOWN
1244887Schin #endif
1254887Schin #ifndef RLIMIT_MEMLOCK
1264887Schin #define RLIMIT_MEMLOCK	RLIMIT_UNKNOWN
1274887Schin #endif
1284887Schin #ifndef RLIMIT_NOFILE
1294887Schin #define RLIMIT_NOFILE	RLIMIT_UNKNOWN
1304887Schin #endif
1314887Schin #ifndef RLIMIT_NPROC
1324887Schin #define RLIMIT_NPROC	RLIMIT_UNKNOWN
1334887Schin #endif
1344887Schin #ifndef RLIMIT_PIPE
1354887Schin #define RLIMIT_PIPE	RLIMIT_UNKNOWN
1364887Schin #endif
1374887Schin #ifndef RLIMIT_RSS
1384887Schin #define RLIMIT_RSS	RLIMIT_UNKNOWN
1394887Schin #endif
1404887Schin #ifndef RLIMIT_SBSIZE
1414887Schin #define RLIMIT_SBSIZE	RLIMIT_UNKNOWN
1424887Schin #endif
1434887Schin #ifndef RLIMIT_STACK
1444887Schin #define RLIMIT_STACK	RLIMIT_UNKNOWN
1454887Schin #endif
1464887Schin #ifndef RLIMIT_PTHREAD
1474887Schin #define RLIMIT_PTHREAD	RLIMIT_UNKNOWN
1484887Schin #endif
1494887Schin #ifndef RLIMIT_VMEM
1504887Schin #define RLIMIT_VMEM	RLIMIT_UNKNOWN
1514887Schin #endif
1524887Schin 
1534887Schin #define LIM_COUNT	0
1544887Schin #define LIM_BLOCK	1
1554887Schin #define LIM_BYTE	2
1564887Schin #define LIM_KBYTE	3
1574887Schin #define LIM_SECOND	4
1584887Schin 
1594887Schin typedef struct Limit_s
1604887Schin {
1614887Schin 	const char	name[8];
1624887Schin 	const char*	description;
1634887Schin 	int		index;
1644887Schin 	const char*	conf;
1654887Schin 	unsigned char	option;
1664887Schin 	unsigned char	type;
1674887Schin } Limit_t;
1684887Schin 
1694887Schin extern const Limit_t	shtab_limits[];
1704887Schin extern const int	shtab_units[];
1714887Schin 
1724887Schin extern const char	e_unlimited[];
1734887Schin extern const char*	e_units[];
1744887Schin 
1754887Schin #endif /* _ULIMIT_H */
176