* cygwin.din: Add symbols for getrlimit' and setrlimit'.
				
					
				
			* exceptions.cc (stackdump): Avoid creating stackdump when
        `rlim_core' is 0.
        * resource.cc: New global variable `rlim_core'.
        (getrlimit): New function.
        (setrlimit): Ditto.
        include/cygwin/version.h: Bump minor API version to 32 due to
        adding `getrlimit' and `setrlimit'.
        include/sys/resource.h: Add defines, types and prototypes for
        `getrlimit' and `setrlimit'.
			
			
This commit is contained in:
		| @@ -1,3 +1,16 @@ | |||||||
|  | Tue Dec 27  1:08:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* cygwin.din: Add symbols for `getrlimit' and `setrlimit'. | ||||||
|  | 	* exceptions.cc (stackdump): Avoid creating stackdump when | ||||||
|  | 	`rlim_core' is 0. | ||||||
|  | 	* resource.cc: New global variable `rlim_core'. | ||||||
|  | 	(getrlimit): New function. | ||||||
|  | 	(setrlimit): Ditto. | ||||||
|  | 	include/cygwin/version.h: Bump minor API version to 32 due to | ||||||
|  | 	adding `getrlimit' and `setrlimit'. | ||||||
|  | 	include/sys/resource.h: Add defines, types and prototypes for | ||||||
|  | 	`getrlimit' and `setrlimit'. | ||||||
|  |  | ||||||
| Mon Dec 25 22:18:42 2000  Christopher Faylor <cgf@cygnus.com> | Mon Dec 25 22:18:42 2000  Christopher Faylor <cgf@cygnus.com> | ||||||
|  |  | ||||||
| 	* autoload.h: Make DLL initializers global to avoid inlining. | 	* autoload.h: Make DLL initializers global to avoid inlining. | ||||||
|   | |||||||
| @@ -347,6 +347,8 @@ getpid | |||||||
| _getpid = getpid | _getpid = getpid | ||||||
| getppid | getppid | ||||||
| _getppid = getppid | _getppid = getppid | ||||||
|  | getrlimit | ||||||
|  | _getrlimit = getrlimit | ||||||
| getrusage | getrusage | ||||||
| _getrusage = getrusage | _getrusage = getrusage | ||||||
| gets | gets | ||||||
| @@ -622,6 +624,8 @@ setlocale | |||||||
| _setlocale = setlocale | _setlocale = setlocale | ||||||
| setpgid | setpgid | ||||||
| _setpgid = setpgid | _setpgid = setpgid | ||||||
|  | setrlimit | ||||||
|  | _setrlimit = setrlimit | ||||||
| setsid | setsid | ||||||
| _setsid = setsid | _setsid = setsid | ||||||
| settimeofday | settimeofday | ||||||
|   | |||||||
| @@ -381,7 +381,12 @@ try_to_debug () | |||||||
| static void | static void | ||||||
| stackdump (EXCEPTION_RECORD *e, CONTEXT *in) | stackdump (EXCEPTION_RECORD *e, CONTEXT *in) | ||||||
| { | { | ||||||
|  |   extern unsigned long rlim_core; | ||||||
|   const char *p; |   const char *p; | ||||||
|  |  | ||||||
|  |   if (rlim_core == 0UL) | ||||||
|  |     return; | ||||||
|  |  | ||||||
|   if (myself->progname[0]) |   if (myself->progname[0]) | ||||||
|     { |     { | ||||||
|       /* write to progname.stackdump if possible */ |       /* write to progname.stackdump if possible */ | ||||||
|   | |||||||
| @@ -122,10 +122,11 @@ details. */ | |||||||
|        29: Export hstrerror |        29: Export hstrerror | ||||||
|        30: CW_GET_CYGDRIVE_INFO addition to external.cc |        30: CW_GET_CYGDRIVE_INFO addition to external.cc | ||||||
|        31: Export inet_aton |        31: Export inet_aton | ||||||
|  |        32: Export getrlimit/setrlimit | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
| #define CYGWIN_VERSION_API_MAJOR 0 | #define CYGWIN_VERSION_API_MAJOR 0 | ||||||
| #define CYGWIN_VERSION_API_MINOR 31 | #define CYGWIN_VERSION_API_MINOR 32 | ||||||
|  |  | ||||||
|      /* There is also a compatibity version number associated with the |      /* There is also a compatibity version number associated with the | ||||||
| 	shared memory regions.  It is incremented when incompatible | 	shared memory regions.  It is incremented when incompatible | ||||||
|   | |||||||
| @@ -7,6 +7,26 @@ | |||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #define RLIMIT_CPU	0		/* CPU time in seconds */ | ||||||
|  | #define RLIMIT_FSIZE	1		/* Maximum filesize */ | ||||||
|  | #define RLIMIT_DATA	2		/* max data size */ | ||||||
|  | #define RLIMIT_STACK	3		/* max stack size */ | ||||||
|  | #define RLIMIT_CORE	4		/* max core file size */ | ||||||
|  | #define RLIMIT_NOFILE	5		/* max number of open files */ | ||||||
|  | #define RLIMIT_OFILE	RLIMIT_NOFILE	/* BSD name */ | ||||||
|  | #define RLIMIT_AS	6		/* address space (virt. memory) limit */ | ||||||
|  |  | ||||||
|  | #define RLIM_INFINITY	(0xffffffffUL) | ||||||
|  | #define RLIM_SAVED_MAX	RLIM_INFINITY | ||||||
|  | #define RLIM_SAVED_CUR	RLIM_INFINITY | ||||||
|  |  | ||||||
|  | typedef unsigned long rlim_t; | ||||||
|  |  | ||||||
|  | struct rlimit { | ||||||
|  | 	rlim_t	rlim_cur; | ||||||
|  | 	rlim_t	rlim_max; | ||||||
|  | }; | ||||||
|  |  | ||||||
| #define	RUSAGE_SELF	0		/* calling process */ | #define	RUSAGE_SELF	0		/* calling process */ | ||||||
| #define	RUSAGE_CHILDREN	-1		/* terminated child processes */ | #define	RUSAGE_CHILDREN	-1		/* terminated child processes */ | ||||||
|  |  | ||||||
| @@ -30,6 +50,9 @@ struct rusage { | |||||||
| #define ru_last         ru_nivcsw | #define ru_last         ru_nivcsw | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | int getrlimit (int __resource, struct rlimit *__rlp); | ||||||
|  | int setrlimit (int __resource, const struct rlimit *__rlp); | ||||||
|  |  | ||||||
| int getrusage (int __who, struct rusage *__rusage); | int getrusage (int __who, struct rusage *__rusage); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
|   | |||||||
| @@ -97,3 +97,58 @@ getrusage (int intwho, struct rusage *rusage_in) | |||||||
|   syscall_printf ("%d = getrusage (%d, %p)", res, intwho, rusage_in); |   syscall_printf ("%d = getrusage (%d, %p)", res, intwho, rusage_in); | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | unsigned long rlim_core = RLIM_INFINITY; | ||||||
|  |  | ||||||
|  | extern "C" | ||||||
|  | int | ||||||
|  | getrlimit (int resource, struct rlimit *rlp) | ||||||
|  | { | ||||||
|  |   MEMORY_BASIC_INFORMATION m; | ||||||
|  |   if (!rlp || !VirtualQuery (rlp, &m, sizeof (m)) || (m.State != MEM_COMMIT)) | ||||||
|  |     return EFAULT; | ||||||
|  |  | ||||||
|  |   rlp->rlim_cur = RLIM_INFINITY; | ||||||
|  |   rlp->rlim_max = RLIM_INFINITY; | ||||||
|  |  | ||||||
|  |   switch (resource) | ||||||
|  |     { | ||||||
|  |     case RLIMIT_CPU: | ||||||
|  |     case RLIMIT_FSIZE: | ||||||
|  |     case RLIMIT_DATA: | ||||||
|  |     case RLIMIT_STACK: | ||||||
|  |     case RLIMIT_NOFILE: | ||||||
|  |       break; | ||||||
|  |     case RLIMIT_CORE: | ||||||
|  |       rlp->rlim_cur = rlim_core; | ||||||
|  |       break; | ||||||
|  |     case RLIMIT_AS: | ||||||
|  |       rlp->rlim_cur = 0x80000000UL; | ||||||
|  |       rlp->rlim_max = 0x80000000UL; | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       set_errno (EINVAL); | ||||||
|  |       return -1; | ||||||
|  |     } | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extern "C" | ||||||
|  | int | ||||||
|  | setrlimit (int resource, const struct rlimit *rlp) | ||||||
|  | { | ||||||
|  |   MEMORY_BASIC_INFORMATION m; | ||||||
|  |   if (!rlp || !VirtualQuery (rlp, &m, sizeof (m)) || (m.State != MEM_COMMIT)) | ||||||
|  |     return EFAULT; | ||||||
|  |  | ||||||
|  |   switch (resource) | ||||||
|  |     { | ||||||
|  |     case RLIMIT_CORE: | ||||||
|  |       rlim_core = rlp->rlim_cur; | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       set_errno (EINVAL); | ||||||
|  |       return -1; | ||||||
|  |     } | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user