* 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

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