| Guido van Rossum | f84a539 | 1997-08-15 00:04:24 +0000 | [diff] [blame] | 1 |  | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 2 | #include "Python.h" | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 3 | #include "structseq.h" | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 4 | #include <sys/resource.h> | 
 | 5 | #include <sys/time.h> | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 6 | #include <string.h> | 
 | 7 | #include <errno.h> | 
| Martin v. Löwis | f26d63b | 2003-03-30 17:23:49 +0000 | [diff] [blame] | 8 | /* for sysconf */ | 
 | 9 | #if defined(HAVE_UNISTD_H) | 
 | 10 | #include <unistd.h> | 
 | 11 | #endif | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 12 |  | 
| Guido van Rossum | 607b33a | 1997-08-17 16:24:30 +0000 | [diff] [blame] | 13 | /* On some systems, these aren't in any header file. | 
 | 14 |    On others they are, with inconsistent prototypes. | 
 | 15 |    We declare the (default) return type, to shut up gcc -Wall; | 
 | 16 |    but we can't declare the prototype, to avoid errors | 
 | 17 |    when the header files declare it different. | 
 | 18 |    Worse, on some Linuxes, getpagesize() returns a size_t... */ | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 19 |  | 
 | 20 | #define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001) | 
 | 21 |  | 
 | 22 | static PyObject *ResourceError; | 
 | 23 |  | 
| Martin v. Löwis | 14f8b4c | 2002-06-13 20:33:02 +0000 | [diff] [blame] | 24 | PyDoc_STRVAR(struct_rusage__doc__, | 
 | 25 | "struct_rusage: Result from getrusage.\n\n" | 
 | 26 | "This object may be accessed either as a tuple of\n" | 
 | 27 | "    (utime,stime,maxrss,ixrss,idrss,isrss,minflt,majflt,\n" | 
 | 28 | "    nswap,inblock,oublock,msgsnd,msgrcv,nsignals,nvcsw,nivcsw)\n" | 
 | 29 | "or via the attributes ru_utime, ru_stime, ru_maxrss, and so on."); | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 30 |  | 
 | 31 | static PyStructSequence_Field struct_rusage_fields[] = { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 32 |     {"ru_utime",        "user time used"}, | 
 | 33 |     {"ru_stime",        "system time used"}, | 
 | 34 |     {"ru_maxrss",       "max. resident set size"}, | 
 | 35 |     {"ru_ixrss",        "shared memory size"}, | 
 | 36 |     {"ru_idrss",        "unshared data size"}, | 
 | 37 |     {"ru_isrss",        "unshared stack size"}, | 
 | 38 |     {"ru_minflt",       "page faults not requiring I/O"}, | 
 | 39 |     {"ru_majflt",       "page faults requiring I/O"}, | 
 | 40 |     {"ru_nswap",        "number of swap outs"}, | 
 | 41 |     {"ru_inblock",      "block input operations"}, | 
 | 42 |     {"ru_oublock",      "block output operations"}, | 
 | 43 |     {"ru_msgsnd",       "IPC messages sent"}, | 
 | 44 |     {"ru_msgrcv",       "IPC messages received"}, | 
 | 45 |     {"ru_nsignals",     "signals received"}, | 
 | 46 |     {"ru_nvcsw",        "voluntary context switches"}, | 
 | 47 |     {"ru_nivcsw",       "involuntary context switches"}, | 
 | 48 |     {0} | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 49 | }; | 
 | 50 |  | 
 | 51 | static PyStructSequence_Desc struct_rusage_desc = { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 52 |     "resource.struct_rusage",           /* name */ | 
 | 53 |     struct_rusage__doc__,       /* doc */ | 
 | 54 |     struct_rusage_fields,       /* fields */ | 
 | 55 |     16          /* n_in_sequence */ | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 56 | }; | 
 | 57 |  | 
| Martin v. Löwis | 19ab6c9 | 2006-04-16 18:55:50 +0000 | [diff] [blame] | 58 | static int initialized; | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 59 | static PyTypeObject StructRUsageType; | 
 | 60 |  | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 61 | static PyObject * | 
| Peter Schneider-Kamp | 416d413 | 2000-07-10 12:15:54 +0000 | [diff] [blame] | 62 | resource_getrusage(PyObject *self, PyObject *args) | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 63 | { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 64 |     int who; | 
 | 65 |     struct rusage ru; | 
 | 66 |     PyObject *result; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 67 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 68 |     if (!PyArg_ParseTuple(args, "i:getrusage", &who)) | 
 | 69 |         return NULL; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 70 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 71 |     if (getrusage(who, &ru) == -1) { | 
 | 72 |         if (errno == EINVAL) { | 
 | 73 |             PyErr_SetString(PyExc_ValueError, | 
 | 74 |                             "invalid who parameter"); | 
 | 75 |             return NULL; | 
 | 76 |         } | 
 | 77 |         PyErr_SetFromErrno(ResourceError); | 
 | 78 |         return NULL; | 
 | 79 |     } | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 80 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 81 |     result = PyStructSequence_New(&StructRUsageType); | 
 | 82 |     if (!result) | 
 | 83 |         return NULL; | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 84 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 85 |     PyStructSequence_SET_ITEM(result, 0, | 
 | 86 |                     PyFloat_FromDouble(doubletime(ru.ru_utime))); | 
 | 87 |     PyStructSequence_SET_ITEM(result, 1, | 
 | 88 |                     PyFloat_FromDouble(doubletime(ru.ru_stime))); | 
 | 89 |     PyStructSequence_SET_ITEM(result, 2, PyInt_FromLong(ru.ru_maxrss)); | 
 | 90 |     PyStructSequence_SET_ITEM(result, 3, PyInt_FromLong(ru.ru_ixrss)); | 
 | 91 |     PyStructSequence_SET_ITEM(result, 4, PyInt_FromLong(ru.ru_idrss)); | 
 | 92 |     PyStructSequence_SET_ITEM(result, 5, PyInt_FromLong(ru.ru_isrss)); | 
 | 93 |     PyStructSequence_SET_ITEM(result, 6, PyInt_FromLong(ru.ru_minflt)); | 
 | 94 |     PyStructSequence_SET_ITEM(result, 7, PyInt_FromLong(ru.ru_majflt)); | 
 | 95 |     PyStructSequence_SET_ITEM(result, 8, PyInt_FromLong(ru.ru_nswap)); | 
 | 96 |     PyStructSequence_SET_ITEM(result, 9, PyInt_FromLong(ru.ru_inblock)); | 
 | 97 |     PyStructSequence_SET_ITEM(result, 10, PyInt_FromLong(ru.ru_oublock)); | 
 | 98 |     PyStructSequence_SET_ITEM(result, 11, PyInt_FromLong(ru.ru_msgsnd)); | 
 | 99 |     PyStructSequence_SET_ITEM(result, 12, PyInt_FromLong(ru.ru_msgrcv)); | 
 | 100 |     PyStructSequence_SET_ITEM(result, 13, PyInt_FromLong(ru.ru_nsignals)); | 
 | 101 |     PyStructSequence_SET_ITEM(result, 14, PyInt_FromLong(ru.ru_nvcsw)); | 
 | 102 |     PyStructSequence_SET_ITEM(result, 15, PyInt_FromLong(ru.ru_nivcsw)); | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 103 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 104 |     if (PyErr_Occurred()) { | 
 | 105 |         Py_DECREF(result); | 
 | 106 |         return NULL; | 
 | 107 |     } | 
| Martin v. Löwis | 688357e | 2002-04-08 21:28:20 +0000 | [diff] [blame] | 108 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 109 |     return result; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 110 | } | 
 | 111 |  | 
 | 112 |  | 
 | 113 | static PyObject * | 
| Peter Schneider-Kamp | 416d413 | 2000-07-10 12:15:54 +0000 | [diff] [blame] | 114 | resource_getrlimit(PyObject *self, PyObject *args) | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 115 | { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 116 |     struct rlimit rl; | 
 | 117 |     int resource; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 118 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 119 |     if (!PyArg_ParseTuple(args, "i:getrlimit", &resource)) | 
 | 120 |         return NULL; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 121 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 122 |     if (resource < 0 || resource >= RLIM_NLIMITS) { | 
 | 123 |         PyErr_SetString(PyExc_ValueError, | 
 | 124 |                         "invalid resource specified"); | 
 | 125 |         return NULL; | 
 | 126 |     } | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 127 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 128 |     if (getrlimit(resource, &rl) == -1) { | 
 | 129 |         PyErr_SetFromErrno(ResourceError); | 
 | 130 |         return NULL; | 
 | 131 |     } | 
| Guido van Rossum | 763737b | 1999-01-06 18:44:57 +0000 | [diff] [blame] | 132 |  | 
 | 133 | #if defined(HAVE_LONG_LONG) | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 134 |     if (sizeof(rl.rlim_cur) > sizeof(long)) { | 
 | 135 |         return Py_BuildValue("LL", | 
 | 136 |                              (PY_LONG_LONG) rl.rlim_cur, | 
 | 137 |                              (PY_LONG_LONG) rl.rlim_max); | 
 | 138 |     } | 
| Guido van Rossum | 763737b | 1999-01-06 18:44:57 +0000 | [diff] [blame] | 139 | #endif | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 140 |     return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 141 | } | 
 | 142 |  | 
 | 143 | static PyObject * | 
| Peter Schneider-Kamp | 416d413 | 2000-07-10 12:15:54 +0000 | [diff] [blame] | 144 | resource_setrlimit(PyObject *self, PyObject *args) | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 145 | { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 146 |     struct rlimit rl; | 
 | 147 |     int resource; | 
 | 148 |     PyObject *curobj, *maxobj; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 149 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 150 |     if (!PyArg_ParseTuple(args, "i(OO):setrlimit", | 
 | 151 |                           &resource, &curobj, &maxobj)) | 
 | 152 |         return NULL; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 153 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 154 |     if (resource < 0 || resource >= RLIM_NLIMITS) { | 
 | 155 |         PyErr_SetString(PyExc_ValueError, | 
 | 156 |                         "invalid resource specified"); | 
 | 157 |         return NULL; | 
 | 158 |     } | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 159 |  | 
| Guido van Rossum | 763737b | 1999-01-06 18:44:57 +0000 | [diff] [blame] | 160 | #if !defined(HAVE_LARGEFILE_SUPPORT) | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 161 |     rl.rlim_cur = PyInt_AsLong(curobj); | 
 | 162 |     if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred()) | 
 | 163 |         return NULL; | 
 | 164 |     rl.rlim_max = PyInt_AsLong(maxobj); | 
 | 165 |     if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred()) | 
 | 166 |         return NULL; | 
| Guido van Rossum | 763737b | 1999-01-06 18:44:57 +0000 | [diff] [blame] | 167 | #else | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 168 |     /* The limits are probably bigger than a long */ | 
 | 169 |     rl.rlim_cur = PyLong_Check(curobj) ? | 
 | 170 |         PyLong_AsLongLong(curobj) : PyInt_AsLong(curobj); | 
 | 171 |     if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred()) | 
 | 172 |         return NULL; | 
 | 173 |     rl.rlim_max = PyLong_Check(maxobj) ? | 
 | 174 |         PyLong_AsLongLong(maxobj) : PyInt_AsLong(maxobj); | 
 | 175 |     if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred()) | 
 | 176 |         return NULL; | 
| Guido van Rossum | 763737b | 1999-01-06 18:44:57 +0000 | [diff] [blame] | 177 | #endif | 
 | 178 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 179 |     rl.rlim_cur = rl.rlim_cur & RLIM_INFINITY; | 
 | 180 |     rl.rlim_max = rl.rlim_max & RLIM_INFINITY; | 
 | 181 |     if (setrlimit(resource, &rl) == -1) { | 
 | 182 |         if (errno == EINVAL) | 
 | 183 |             PyErr_SetString(PyExc_ValueError, | 
 | 184 |                             "current limit exceeds maximum limit"); | 
 | 185 |         else if (errno == EPERM) | 
 | 186 |             PyErr_SetString(PyExc_ValueError, | 
 | 187 |                             "not allowed to raise maximum limit"); | 
 | 188 |         else | 
 | 189 |             PyErr_SetFromErrno(ResourceError); | 
 | 190 |         return NULL; | 
 | 191 |     } | 
 | 192 |     Py_INCREF(Py_None); | 
 | 193 |     return Py_None; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 194 | } | 
 | 195 |  | 
 | 196 | static PyObject * | 
| Georg Brandl | 96a8c39 | 2006-05-29 21:04:52 +0000 | [diff] [blame] | 197 | resource_getpagesize(PyObject *self, PyObject *unused) | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 198 | { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 199 |     long pagesize = 0; | 
| Martin v. Löwis | f26d63b | 2003-03-30 17:23:49 +0000 | [diff] [blame] | 200 | #if defined(HAVE_GETPAGESIZE) | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 201 |     pagesize = getpagesize(); | 
| Martin v. Löwis | f26d63b | 2003-03-30 17:23:49 +0000 | [diff] [blame] | 202 | #elif defined(HAVE_SYSCONF) | 
| Martin v. Löwis | 0cb3c63 | 2004-08-12 13:26:56 +0000 | [diff] [blame] | 203 | #if defined(_SC_PAGE_SIZE) | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 204 |     pagesize = sysconf(_SC_PAGE_SIZE); | 
| Martin v. Löwis | 0cb3c63 | 2004-08-12 13:26:56 +0000 | [diff] [blame] | 205 | #else | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 206 |     /* Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE */ | 
 | 207 |     pagesize = sysconf(_SC_PAGESIZE); | 
| Martin v. Löwis | 0cb3c63 | 2004-08-12 13:26:56 +0000 | [diff] [blame] | 208 | #endif | 
| Martin v. Löwis | f26d63b | 2003-03-30 17:23:49 +0000 | [diff] [blame] | 209 | #endif | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 210 |     return Py_BuildValue("i", pagesize); | 
| Martin v. Löwis | f26d63b | 2003-03-30 17:23:49 +0000 | [diff] [blame] | 211 |  | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 212 | } | 
 | 213 |  | 
 | 214 | /* List of functions */ | 
 | 215 |  | 
 | 216 | static struct PyMethodDef | 
 | 217 | resource_methods[] = { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 218 |     {"getrusage",    resource_getrusage,   METH_VARARGS}, | 
 | 219 |     {"getrlimit",    resource_getrlimit,   METH_VARARGS}, | 
 | 220 |     {"setrlimit",    resource_setrlimit,   METH_VARARGS}, | 
 | 221 |     {"getpagesize",  resource_getpagesize, METH_NOARGS}, | 
 | 222 |     {NULL, NULL}                             /* sentinel */ | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 223 | }; | 
 | 224 |  | 
 | 225 |  | 
 | 226 | /* Module initialization */ | 
 | 227 |  | 
| Mark Hammond | fe51c6d | 2002-08-02 02:27:13 +0000 | [diff] [blame] | 228 | PyMODINIT_FUNC | 
| Andrew M. Kuchling | fda3c3d | 2001-09-17 16:19:16 +0000 | [diff] [blame] | 229 | initresource(void) | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 230 | { | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 231 |     PyObject *m, *v; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 232 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 233 |     /* Create the module and add the functions */ | 
 | 234 |     m = Py_InitModule("resource", resource_methods); | 
 | 235 |     if (m == NULL) | 
 | 236 |         return; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 237 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 238 |     /* Add some symbolic constants to the module */ | 
 | 239 |     if (ResourceError == NULL) { | 
 | 240 |         ResourceError = PyErr_NewException("resource.error", | 
 | 241 |                                            NULL, NULL); | 
 | 242 |     } | 
 | 243 |     Py_INCREF(ResourceError); | 
 | 244 |     PyModule_AddObject(m, "error", ResourceError); | 
 | 245 |     if (!initialized) | 
 | 246 |         PyStructSequence_InitType(&StructRUsageType, | 
 | 247 |                                   &struct_rusage_desc); | 
 | 248 |     Py_INCREF(&StructRUsageType); | 
 | 249 |     PyModule_AddObject(m, "struct_rusage", | 
 | 250 |                        (PyObject*) &StructRUsageType); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 251 |  | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 252 |     /* insert constants */ | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 253 | #ifdef RLIMIT_CPU | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 254 |     PyModule_AddIntConstant(m, "RLIMIT_CPU", RLIMIT_CPU); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 255 | #endif | 
 | 256 |  | 
 | 257 | #ifdef RLIMIT_FSIZE | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 258 |     PyModule_AddIntConstant(m, "RLIMIT_FSIZE", RLIMIT_FSIZE); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 259 | #endif | 
 | 260 |  | 
 | 261 | #ifdef RLIMIT_DATA | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 262 |     PyModule_AddIntConstant(m, "RLIMIT_DATA", RLIMIT_DATA); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 263 | #endif | 
 | 264 |  | 
 | 265 | #ifdef RLIMIT_STACK | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 266 |     PyModule_AddIntConstant(m, "RLIMIT_STACK", RLIMIT_STACK); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 267 | #endif | 
 | 268 |  | 
 | 269 | #ifdef RLIMIT_CORE | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 270 |     PyModule_AddIntConstant(m, "RLIMIT_CORE", RLIMIT_CORE); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 271 | #endif | 
 | 272 |  | 
 | 273 | #ifdef RLIMIT_NOFILE | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 274 |     PyModule_AddIntConstant(m, "RLIMIT_NOFILE", RLIMIT_NOFILE); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 275 | #endif | 
 | 276 |  | 
 | 277 | #ifdef RLIMIT_OFILE | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 278 |     PyModule_AddIntConstant(m, "RLIMIT_OFILE", RLIMIT_OFILE); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 279 | #endif | 
 | 280 |  | 
 | 281 | #ifdef RLIMIT_VMEM | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 282 |     PyModule_AddIntConstant(m, "RLIMIT_VMEM", RLIMIT_VMEM); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 283 | #endif | 
 | 284 |  | 
 | 285 | #ifdef RLIMIT_AS | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 286 |     PyModule_AddIntConstant(m, "RLIMIT_AS", RLIMIT_AS); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 287 | #endif | 
 | 288 |  | 
 | 289 | #ifdef RLIMIT_RSS | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 290 |     PyModule_AddIntConstant(m, "RLIMIT_RSS", RLIMIT_RSS); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 291 | #endif | 
 | 292 |  | 
 | 293 | #ifdef RLIMIT_NPROC | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 294 |     PyModule_AddIntConstant(m, "RLIMIT_NPROC", RLIMIT_NPROC); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 295 | #endif | 
 | 296 |  | 
 | 297 | #ifdef RLIMIT_MEMLOCK | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 298 |     PyModule_AddIntConstant(m, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 299 | #endif | 
 | 300 |  | 
| Martin v. Löwis | 43fd99c | 2006-09-16 17:36:37 +0000 | [diff] [blame] | 301 | #ifdef RLIMIT_SBSIZE | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 302 |     PyModule_AddIntConstant(m, "RLIMIT_SBSIZE", RLIMIT_SBSIZE); | 
| Martin v. Löwis | 43fd99c | 2006-09-16 17:36:37 +0000 | [diff] [blame] | 303 | #endif | 
 | 304 |  | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 305 | #ifdef RUSAGE_SELF | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 306 |     PyModule_AddIntConstant(m, "RUSAGE_SELF", RUSAGE_SELF); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 307 | #endif | 
 | 308 |  | 
| Guido van Rossum | ebd05eb | 1997-12-09 19:35:48 +0000 | [diff] [blame] | 309 | #ifdef RUSAGE_CHILDREN | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 310 |     PyModule_AddIntConstant(m, "RUSAGE_CHILDREN", RUSAGE_CHILDREN); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 311 | #endif | 
 | 312 |  | 
 | 313 | #ifdef RUSAGE_BOTH | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 314 |     PyModule_AddIntConstant(m, "RUSAGE_BOTH", RUSAGE_BOTH); | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 315 | #endif | 
| Neil Schemenauer | 29ac3cb | 2002-03-24 22:27:39 +0000 | [diff] [blame] | 316 |  | 
 | 317 | #if defined(HAVE_LONG_LONG) | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 318 |     if (sizeof(RLIM_INFINITY) > sizeof(long)) { | 
 | 319 |         v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY); | 
 | 320 |     } else | 
| Neil Schemenauer | 29ac3cb | 2002-03-24 22:27:39 +0000 | [diff] [blame] | 321 | #endif | 
| Antoine Pitrou | c83ea13 | 2010-05-09 14:46:46 +0000 | [diff] [blame] | 322 |     { | 
 | 323 |         v = PyInt_FromLong((long) RLIM_INFINITY); | 
 | 324 |     } | 
 | 325 |     if (v) { | 
 | 326 |         PyModule_AddObject(m, "RLIM_INFINITY", v); | 
 | 327 |     } | 
 | 328 |     initialized = 1; | 
| Guido van Rossum | 2e63139 | 1996-12-18 18:37:27 +0000 | [diff] [blame] | 329 | } |