annotate Modules/resource.c @ 84007:dbfbdf2b5c19 3.3

Fix #17967: For ftp urls CWD to target instead of hopping to each directory towards target. This fixes a bug where target is accessible, but parent directories are restricted.
author Senthil Kumaran <senthil@uthcode.com>
date Sat, 01 Jun 2013 08:27:06 -0700
parents e0ee10f27e5f
children 12cbb5183d98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6052
1da122718598 Added std copyright notice.
Guido van Rossum <guido@python.org>
parents: 5941
diff changeset
1
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #include "Python.h"
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 #include <sys/resource.h>
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #include <sys/time.h>
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 #include <string.h>
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #include <errno.h>
28454
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
7 /* for sysconf */
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
8 #if defined(HAVE_UNISTD_H)
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
9 #include <unistd.h>
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
10 #endif
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
6082
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
12 /* On some systems, these aren't in any header file.
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
13 On others they are, with inconsistent prototypes.
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
14 We declare the (default) return type, to shut up gcc -Wall;
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
15 but we can't declare the prototype, to avoid errors
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
16 when the header files declare it different.
d7ca0554795e Different strategy regarding whether to declare getrusage() and
Guido van Rossum <guido@python.org>
parents: 6052
diff changeset
17 Worse, on some Linuxes, getpagesize() returns a size_t... */
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 #define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001)
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
21 PyDoc_STRVAR(struct_rusage__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
22 "struct_rusage: Result from getrusage.\n\n"
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
23 "This object may be accessed either as a tuple of\n"
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
24 " (utime,stime,maxrss,ixrss,idrss,isrss,minflt,majflt,\n"
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
25 " nswap,inblock,oublock,msgsnd,msgrcv,nsignals,nvcsw,nivcsw)\n"
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23250
diff changeset
26 "or via the attributes ru_utime, ru_stime, ru_maxrss, and so on.");
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
27
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
28 static PyStructSequence_Field struct_rusage_fields[] = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
29 {"ru_utime", "user time used"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
30 {"ru_stime", "system time used"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
31 {"ru_maxrss", "max. resident set size"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
32 {"ru_ixrss", "shared memory size"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
33 {"ru_idrss", "unshared data size"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
34 {"ru_isrss", "unshared stack size"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
35 {"ru_minflt", "page faults not requiring I/O"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
36 {"ru_majflt", "page faults requiring I/O"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
37 {"ru_nswap", "number of swap outs"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
38 {"ru_inblock", "block input operations"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
39 {"ru_oublock", "block output operations"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
40 {"ru_msgsnd", "IPC messages sent"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
41 {"ru_msgrcv", "IPC messages received"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
42 {"ru_nsignals", "signals received"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
43 {"ru_nvcsw", "voluntary context switches"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
44 {"ru_nivcsw", "involuntary context switches"},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
45 {0}
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
46 };
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
47
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
48 static PyStructSequence_Desc struct_rusage_desc = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
49 "resource.struct_rusage", /* name */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
50 struct_rusage__doc__, /* doc */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
51 struct_rusage_fields, /* fields */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
52 16 /* n_in_sequence */
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
53 };
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
54
37772
b90a7c6021bc Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents: 36324
diff changeset
55 static int initialized;
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
56 static PyTypeObject StructRUsageType;
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
57
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
59 resource_getrusage(PyObject *self, PyObject *args)
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
61 int who;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
62 struct rusage ru;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
63 PyObject *result;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
65 if (!PyArg_ParseTuple(args, "i:getrusage", &who))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
66 return NULL;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
68 if (getrusage(who, &ru) == -1) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
69 if (errno == EINVAL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
70 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
71 "invalid who parameter");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
72 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
73 }
73930
8d670cb0d64a alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents: 66555
diff changeset
74 PyErr_SetFromErrno(PyExc_OSError);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
75 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
76 }
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
77
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
78 result = PyStructSequence_New(&StructRUsageType);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
79 if (!result)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
80 return NULL;
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
81
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
82 PyStructSequence_SET_ITEM(result, 0,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
83 PyFloat_FromDouble(doubletime(ru.ru_utime)));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
84 PyStructSequence_SET_ITEM(result, 1,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
85 PyFloat_FromDouble(doubletime(ru.ru_stime)));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
86 PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong(ru.ru_maxrss));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
87 PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong(ru.ru_ixrss));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
88 PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong(ru.ru_idrss));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
89 PyStructSequence_SET_ITEM(result, 5, PyLong_FromLong(ru.ru_isrss));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
90 PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(ru.ru_minflt));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
91 PyStructSequence_SET_ITEM(result, 7, PyLong_FromLong(ru.ru_majflt));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
92 PyStructSequence_SET_ITEM(result, 8, PyLong_FromLong(ru.ru_nswap));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
93 PyStructSequence_SET_ITEM(result, 9, PyLong_FromLong(ru.ru_inblock));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
94 PyStructSequence_SET_ITEM(result, 10, PyLong_FromLong(ru.ru_oublock));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
95 PyStructSequence_SET_ITEM(result, 11, PyLong_FromLong(ru.ru_msgsnd));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
96 PyStructSequence_SET_ITEM(result, 12, PyLong_FromLong(ru.ru_msgrcv));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
97 PyStructSequence_SET_ITEM(result, 13, PyLong_FromLong(ru.ru_nsignals));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
98 PyStructSequence_SET_ITEM(result, 14, PyLong_FromLong(ru.ru_nvcsw));
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
99 PyStructSequence_SET_ITEM(result, 15, PyLong_FromLong(ru.ru_nivcsw));
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
100
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
101 if (PyErr_Occurred()) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
102 Py_DECREF(result);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
103 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
104 }
22899
c0d7b5788cbe Patch #512005: getrusage() returns struct-like object.
Martin v. Löwis <martin@v.loewis.de>
parents: 22502
diff changeset
105
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
106 return result;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 }
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
109
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
111 resource_getrlimit(PyObject *self, PyObject *args)
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
113 struct rlimit rl;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
114 int resource;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
116 if (!PyArg_ParseTuple(args, "i:getrlimit", &resource))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
117 return NULL;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
118
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
119 if (resource < 0 || resource >= RLIM_NLIMITS) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
120 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
121 "invalid resource specified");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
122 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
123 }
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
125 if (getrlimit(resource, &rl) == -1) {
73930
8d670cb0d64a alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents: 66555
diff changeset
126 PyErr_SetFromErrno(PyExc_OSError);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
127 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
128 }
9787
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
129
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
130 #if defined(HAVE_LONG_LONG)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
131 if (sizeof(rl.rlim_cur) > sizeof(long)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
132 return Py_BuildValue("LL",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
133 (PY_LONG_LONG) rl.rlim_cur,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
134 (PY_LONG_LONG) rl.rlim_max);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
135 }
9787
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
136 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
137 return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 }
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
139
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
141 resource_setrlimit(PyObject *self, PyObject *args)
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
143 struct rlimit rl;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
144 int resource;
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
145 PyObject *limits, *curobj, *maxobj;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
147 if (!PyArg_ParseTuple(args, "iO:setrlimit", &resource, &limits))
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
148 return NULL;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
150 if (resource < 0 || resource >= RLIM_NLIMITS) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
151 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
152 "invalid resource specified");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
153 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
154 }
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
155
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
156 limits = PySequence_Tuple(limits);
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
157 if (!limits)
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
158 /* Here limits is a borrowed reference */
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
159 return NULL;
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
160
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
161 if (PyTuple_GET_SIZE(limits) != 2) {
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
162 PyErr_SetString(PyExc_ValueError,
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
163 "expected a tuple of 2 integers");
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
164 goto error;
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
165 }
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
166 curobj = PyTuple_GET_ITEM(limits, 0);
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
167 maxobj = PyTuple_GET_ITEM(limits, 1);
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
168
9787
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
169 #if !defined(HAVE_LARGEFILE_SUPPORT)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
170 rl.rlim_cur = PyLong_AsLong(curobj);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
171 if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred())
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
172 goto error;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
173 rl.rlim_max = PyLong_AsLong(maxobj);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
174 if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred())
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
175 goto error;
9787
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
176 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
177 /* The limits are probably bigger than a long */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
178 rl.rlim_cur = PyLong_AsLongLong(curobj);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
179 if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred())
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
180 goto error;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
181 rl.rlim_max = PyLong_AsLongLong(maxobj);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
182 if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred())
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
183 goto error;
9787
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
184 #endif
1beaf9179125 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 6798
diff changeset
185
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
186 rl.rlim_cur = rl.rlim_cur & RLIM_INFINITY;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
187 rl.rlim_max = rl.rlim_max & RLIM_INFINITY;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
188 if (setrlimit(resource, &rl) == -1) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
189 if (errno == EINVAL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
190 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
191 "current limit exceeds maximum limit");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
192 else if (errno == EPERM)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
193 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
194 "not allowed to raise maximum limit");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
195 else
73930
8d670cb0d64a alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents: 66555
diff changeset
196 PyErr_SetFromErrno(PyExc_OSError);
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
197 goto error;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
198 }
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
199 Py_DECREF(limits);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
200 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
201 return Py_None;
81987
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
202
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
203 error:
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
204 Py_DECREF(limits);
4bac47eb444c Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
Serhiy Storchaka <storchaka@gmail.com>
parents: 66555
diff changeset
205 return NULL;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 }
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 37772
diff changeset
209 resource_getpagesize(PyObject *self, PyObject *unused)
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
211 long pagesize = 0;
28454
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
212 #if defined(HAVE_GETPAGESIZE)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
213 pagesize = getpagesize();
28454
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
214 #elif defined(HAVE_SYSCONF)
33095
ddd24d72ad6a Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents: 28461
diff changeset
215 #if defined(_SC_PAGE_SIZE)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
216 pagesize = sysconf(_SC_PAGE_SIZE);
33095
ddd24d72ad6a Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents: 28461
diff changeset
217 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
218 /* Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
219 pagesize = sysconf(_SC_PAGESIZE);
33095
ddd24d72ad6a Patch #1005568: Use _SC_PAGESIZE on Irix.
Martin v. Löwis <martin@v.loewis.de>
parents: 28461
diff changeset
220 #endif
28454
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
221 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
222 return Py_BuildValue("i", pagesize);
28454
f3078654a5c0 Patch #650412: Check whether the address of flock and getpagesize
Martin v. Löwis <martin@v.loewis.de>
parents: 28437
diff changeset
223
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 }
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
225
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 /* List of functions */
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
227
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 static struct PyMethodDef
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 resource_methods[] = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
230 {"getrusage", resource_getrusage, METH_VARARGS},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
231 {"getrlimit", resource_getrlimit, METH_VARARGS},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
232 {"setrlimit", resource_setrlimit, METH_VARARGS},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
233 {"getpagesize", resource_getpagesize, METH_NOARGS},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
234 {NULL, NULL} /* sentinel */
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 };
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
236
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
237
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 /* Module initialization */
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
239
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
240
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
241 static struct PyModuleDef resourcemodule = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
242 PyModuleDef_HEAD_INIT,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
243 "resource",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
244 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
245 -1,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
246 resource_methods,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
247 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
248 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
249 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
250 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
251 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
252
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
253 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
254 PyInit_resource(void)
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
256 PyObject *m, *v;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
258 /* Create the module and add the functions */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
259 m = PyModule_Create(&resourcemodule);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
260 if (m == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
261 return NULL;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
262
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
263 /* Add some symbolic constants to the module */
73930
8d670cb0d64a alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents: 66555
diff changeset
264 Py_INCREF(PyExc_OSError);
8d670cb0d64a alias resource.error to OSError
Benjamin Peterson <benjamin@python.org>
parents: 66555
diff changeset
265 PyModule_AddObject(m, "error", PyExc_OSError);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
266 if (!initialized)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
267 PyStructSequence_InitType(&StructRUsageType,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
268 &struct_rusage_desc);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
269 Py_INCREF(&StructRUsageType);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
270 PyModule_AddObject(m, "struct_rusage",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
271 (PyObject*) &StructRUsageType);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
272
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
273 /* insert constants */
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 #ifdef RLIMIT_CPU
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
275 PyModule_AddIntConstant(m, "RLIMIT_CPU", RLIMIT_CPU);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
277
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 #ifdef RLIMIT_FSIZE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
279 PyModule_AddIntConstant(m, "RLIMIT_FSIZE", RLIMIT_FSIZE);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
281
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 #ifdef RLIMIT_DATA
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
283 PyModule_AddIntConstant(m, "RLIMIT_DATA", RLIMIT_DATA);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
285
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 #ifdef RLIMIT_STACK
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
287 PyModule_AddIntConstant(m, "RLIMIT_STACK", RLIMIT_STACK);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
289
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 #ifdef RLIMIT_CORE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
291 PyModule_AddIntConstant(m, "RLIMIT_CORE", RLIMIT_CORE);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
293
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 #ifdef RLIMIT_NOFILE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
295 PyModule_AddIntConstant(m, "RLIMIT_NOFILE", RLIMIT_NOFILE);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
297
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 #ifdef RLIMIT_OFILE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
299 PyModule_AddIntConstant(m, "RLIMIT_OFILE", RLIMIT_OFILE);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
301
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 #ifdef RLIMIT_VMEM
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
303 PyModule_AddIntConstant(m, "RLIMIT_VMEM", RLIMIT_VMEM);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
305
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 #ifdef RLIMIT_AS
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
307 PyModule_AddIntConstant(m, "RLIMIT_AS", RLIMIT_AS);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
309
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 #ifdef RLIMIT_RSS
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
311 PyModule_AddIntConstant(m, "RLIMIT_RSS", RLIMIT_RSS);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
313
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 #ifdef RLIMIT_NPROC
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
315 PyModule_AddIntConstant(m, "RLIMIT_NPROC", RLIMIT_NPROC);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
317
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 #ifdef RLIMIT_MEMLOCK
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
319 PyModule_AddIntConstant(m, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
321
39850
1660eaa0cc26 Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents: 38489
diff changeset
322 #ifdef RLIMIT_SBSIZE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
323 PyModule_AddIntConstant(m, "RLIMIT_SBSIZE", RLIMIT_SBSIZE);
39850
1660eaa0cc26 Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents: 38489
diff changeset
324 #endif
1660eaa0cc26 Patch #1557515: Add RLIMIT_SBSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents: 38489
diff changeset
325
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 #ifdef RUSAGE_SELF
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
327 PyModule_AddIntConstant(m, "RUSAGE_SELF", RUSAGE_SELF);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
329
6798
0ba50c7429e5 Typo: RUSAGE_CHILDERN -> RUSAGE_CHILDREN.
Guido van Rossum <guido@python.org>
parents: 6536
diff changeset
330 #ifdef RUSAGE_CHILDREN
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
331 PyModule_AddIntConstant(m, "RUSAGE_CHILDREN", RUSAGE_CHILDREN);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 #endif
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
333
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 #ifdef RUSAGE_BOTH
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
335 PyModule_AddIntConstant(m, "RUSAGE_BOTH", RUSAGE_BOTH);
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
336 #endif
22502
5b8be8611d8c Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 21943
diff changeset
337
66216
0d1b66230247 Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61466
diff changeset
338 #ifdef RUSAGE_THREAD
0d1b66230247 Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61466
diff changeset
339 PyModule_AddIntConstant(m, "RUSAGE_THREAD", RUSAGE_THREAD);
0d1b66230247 Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61466
diff changeset
340 #endif
0d1b66230247 Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61466
diff changeset
341
22502
5b8be8611d8c Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 21943
diff changeset
342 #if defined(HAVE_LONG_LONG)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
343 if (sizeof(RLIM_INFINITY) > sizeof(long)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
344 v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
345 } else
22502
5b8be8611d8c Expose RLIM_INFINITY constant. Closes SF patch 489066.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 21943
diff changeset
346 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
347 {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
348 v = PyLong_FromLong((long) RLIM_INFINITY);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
349 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
350 if (v) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
351 PyModule_AddObject(m, "RLIM_INFINITY", v);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
352 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
353 initialized = 1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53929
diff changeset
354 return m;
4770
72108faa56bf Added Jeremy's resource module.
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 }