* 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:
Corinna Vinschen 2000-12-27 00:13:57 +00:00
parent 2803e941b3
commit 8a93913d26
6 changed files with 102 additions and 1 deletions

View File

@ -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.

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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;
}