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
path: root/winsup
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
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')
-rw-r--r--winsup/cygwin/ChangeLog13
-rw-r--r--winsup/cygwin/cygwin.din4
-rw-r--r--winsup/cygwin/exceptions.cc5
-rw-r--r--winsup/cygwin/include/cygwin/version.h3
-rw-r--r--winsup/cygwin/include/sys/resource.h23
-rw-r--r--winsup/cygwin/resource.cc55
6 files changed, 102 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 649fc4741..10e7e30af 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
index 8bb86ecea..c01a4b727 100644
--- a/winsup/cygwin/cygwin.din
+++ b/winsup/cygwin/cygwin.din
@@ -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
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index c50e5c18a..9b13a00a9 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -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 */
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index c41a9c3a1..0e51b31fd 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -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
diff --git a/winsup/cygwin/include/sys/resource.h b/winsup/cygwin/include/sys/resource.h
index a709ec00f..1f859cf0f 100644
--- a/winsup/cygwin/include/sys/resource.h
+++ b/winsup/cygwin/include/sys/resource.h
@@ -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
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;
+}