mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 21:09:22 +08:00
* 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:
parent
2803e941b3
commit
8a93913d26
@ -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>
|
||||
|
||||
* autoload.h: Make DLL initializers global to avoid inlining.
|
||||
|
@ -347,6 +347,8 @@ getpid
|
||||
_getpid = getpid
|
||||
getppid
|
||||
_getppid = getppid
|
||||
getrlimit
|
||||
_getrlimit = getrlimit
|
||||
getrusage
|
||||
_getrusage = getrusage
|
||||
gets
|
||||
@ -622,6 +624,8 @@ setlocale
|
||||
_setlocale = setlocale
|
||||
setpgid
|
||||
_setpgid = setpgid
|
||||
setrlimit
|
||||
_setrlimit = setrlimit
|
||||
setsid
|
||||
_setsid = setsid
|
||||
settimeofday
|
||||
|
@ -381,7 +381,12 @@ try_to_debug ()
|
||||
static void
|
||||
stackdump (EXCEPTION_RECORD *e, CONTEXT *in)
|
||||
{
|
||||
extern unsigned long rlim_core;
|
||||
const char *p;
|
||||
|
||||
if (rlim_core == 0UL)
|
||||
return;
|
||||
|
||||
if (myself->progname[0])
|
||||
{
|
||||
/* write to progname.stackdump if possible */
|
||||
|
@ -122,10 +122,11 @@ details. */
|
||||
29: Export hstrerror
|
||||
30: CW_GET_CYGDRIVE_INFO addition to external.cc
|
||||
31: Export inet_aton
|
||||
32: Export getrlimit/setrlimit
|
||||
*/
|
||||
|
||||
#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
|
||||
shared memory regions. It is incremented when incompatible
|
||||
|
@ -7,6 +7,26 @@
|
||||
extern "C" {
|
||||
#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_CHILDREN -1 /* terminated child processes */
|
||||
|
||||
@ -30,6 +50,9 @@ struct rusage {
|
||||
#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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -97,3 +97,58 @@ getrusage (int intwho, struct rusage *rusage_in)
|
||||
syscall_printf ("%d = getrusage (%d, %p)", res, intwho, rusage_in);
|
||||
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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user