diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-12-27 03:13:57 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-12-27 03:13:57 +0300 |
commit | 8a93913d2652b0f3f42b5d2d9214e16a1f115494 (patch) | |
tree | b00e45a538ce607b2ee15c2b8b0994a2f154c17a /winsup/cygwin/resource.cc | |
parent | 2803e941b340e21113bfff9e22e1bc25ba5f9990 (diff) |
* 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'.
Diffstat (limited to 'winsup/cygwin/resource.cc')
-rw-r--r-- | winsup/cygwin/resource.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/winsup/cygwin/resource.cc b/winsup/cygwin/resource.cc index 58c2ced25..e8e53d110 100644 --- a/winsup/cygwin/resource.cc +++ b/winsup/cygwin/resource.cc @@ -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; +} |