Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2000-12-27 03:13:57 +0300
committerCorinna Vinschen <corinna@vinschen.de>2000-12-27 03:13:57 +0300
commit8a93913d2652b0f3f42b5d2d9214e16a1f115494 (patch)
treeb00e45a538ce607b2ee15c2b8b0994a2f154c17a /winsup/cygwin/resource.cc
parent2803e941b340e21113bfff9e22e1bc25ba5f9990 (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.cc55
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;
+}