blob: 0a66f8fd66fbf6ebaf2b28e89989b2e62d286c11 [file] [log] [blame]
Serhiy Storchaka19897632017-03-12 13:08:30 +02001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(resource_getrusage__doc__,
6"getrusage($module, who, /)\n"
7"--\n"
8"\n");
9
10#define RESOURCE_GETRUSAGE_METHODDEF \
11 {"getrusage", (PyCFunction)resource_getrusage, METH_O, resource_getrusage__doc__},
12
13static PyObject *
14resource_getrusage_impl(PyObject *module, int who);
15
16static PyObject *
17resource_getrusage(PyObject *module, PyObject *arg)
18{
19 PyObject *return_value = NULL;
20 int who;
21
Serhiy Storchaka32d96a22018-12-25 13:23:47 +020022 if (PyFloat_Check(arg)) {
23 PyErr_SetString(PyExc_TypeError,
24 "integer argument expected, got float" );
25 goto exit;
26 }
27 who = _PyLong_AsInt(arg);
28 if (who == -1 && PyErr_Occurred()) {
Serhiy Storchaka19897632017-03-12 13:08:30 +020029 goto exit;
30 }
31 return_value = resource_getrusage_impl(module, who);
32
33exit:
34 return return_value;
35}
36
37PyDoc_STRVAR(resource_getrlimit__doc__,
38"getrlimit($module, resource, /)\n"
39"--\n"
40"\n");
41
42#define RESOURCE_GETRLIMIT_METHODDEF \
43 {"getrlimit", (PyCFunction)resource_getrlimit, METH_O, resource_getrlimit__doc__},
44
45static PyObject *
46resource_getrlimit_impl(PyObject *module, int resource);
47
48static PyObject *
49resource_getrlimit(PyObject *module, PyObject *arg)
50{
51 PyObject *return_value = NULL;
52 int resource;
53
Serhiy Storchaka32d96a22018-12-25 13:23:47 +020054 if (PyFloat_Check(arg)) {
55 PyErr_SetString(PyExc_TypeError,
56 "integer argument expected, got float" );
57 goto exit;
58 }
59 resource = _PyLong_AsInt(arg);
60 if (resource == -1 && PyErr_Occurred()) {
Serhiy Storchaka19897632017-03-12 13:08:30 +020061 goto exit;
62 }
63 return_value = resource_getrlimit_impl(module, resource);
64
65exit:
66 return return_value;
67}
68
69PyDoc_STRVAR(resource_setrlimit__doc__,
70"setrlimit($module, resource, limits, /)\n"
71"--\n"
72"\n");
73
74#define RESOURCE_SETRLIMIT_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +020075 {"setrlimit", (PyCFunction)(void(*)(void))resource_setrlimit, METH_FASTCALL, resource_setrlimit__doc__},
Serhiy Storchaka19897632017-03-12 13:08:30 +020076
77static PyObject *
78resource_setrlimit_impl(PyObject *module, int resource, PyObject *limits);
79
80static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +020081resource_setrlimit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Serhiy Storchaka19897632017-03-12 13:08:30 +020082{
83 PyObject *return_value = NULL;
84 int resource;
85 PyObject *limits;
86
Sylvain74453812017-06-10 06:51:48 +020087 if (!_PyArg_ParseStack(args, nargs, "iO:setrlimit",
88 &resource, &limits)) {
Serhiy Storchaka19897632017-03-12 13:08:30 +020089 goto exit;
90 }
91 return_value = resource_setrlimit_impl(module, resource, limits);
92
93exit:
94 return return_value;
95}
96
97#if defined(HAVE_PRLIMIT)
98
99PyDoc_STRVAR(resource_prlimit__doc__,
100"prlimit(pid, resource, [limits])");
101
102#define RESOURCE_PRLIMIT_METHODDEF \
103 {"prlimit", (PyCFunction)resource_prlimit, METH_VARARGS, resource_prlimit__doc__},
104
105static PyObject *
106resource_prlimit_impl(PyObject *module, pid_t pid, int resource,
107 int group_right_1, PyObject *limits);
108
109static PyObject *
110resource_prlimit(PyObject *module, PyObject *args)
111{
112 PyObject *return_value = NULL;
113 pid_t pid;
114 int resource;
115 int group_right_1 = 0;
116 PyObject *limits = NULL;
117
118 switch (PyTuple_GET_SIZE(args)) {
119 case 2:
120 if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "i:prlimit", &pid, &resource)) {
121 goto exit;
122 }
123 break;
124 case 3:
125 if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "iO:prlimit", &pid, &resource, &limits)) {
126 goto exit;
127 }
128 group_right_1 = 1;
129 break;
130 default:
131 PyErr_SetString(PyExc_TypeError, "resource.prlimit requires 2 to 3 arguments");
132 goto exit;
133 }
134 return_value = resource_prlimit_impl(module, pid, resource, group_right_1, limits);
135
136exit:
137 return return_value;
138}
139
140#endif /* defined(HAVE_PRLIMIT) */
141
142PyDoc_STRVAR(resource_getpagesize__doc__,
143"getpagesize($module, /)\n"
144"--\n"
145"\n");
146
147#define RESOURCE_GETPAGESIZE_METHODDEF \
148 {"getpagesize", (PyCFunction)resource_getpagesize, METH_NOARGS, resource_getpagesize__doc__},
149
150static int
151resource_getpagesize_impl(PyObject *module);
152
153static PyObject *
154resource_getpagesize(PyObject *module, PyObject *Py_UNUSED(ignored))
155{
156 PyObject *return_value = NULL;
157 int _return_value;
158
159 _return_value = resource_getpagesize_impl(module);
160 if ((_return_value == -1) && PyErr_Occurred()) {
161 goto exit;
162 }
163 return_value = PyLong_FromLong((long)_return_value);
164
165exit:
166 return return_value;
167}
168
169#ifndef RESOURCE_PRLIMIT_METHODDEF
170 #define RESOURCE_PRLIMIT_METHODDEF
171#endif /* !defined(RESOURCE_PRLIMIT_METHODDEF) */
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200172/*[clinic end generated code: output=b16a9149639081fd input=a9049054013a1b77]*/