Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8fb7bb2

Browse files
committed
Issue #20152: Convert the grp module to Argument Clinic.
1 parent f2de1fc commit 8fb7bb2

2 files changed

Lines changed: 140 additions & 26 deletions

File tree

Modules/clinic/grpmodule.c.h

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*[clinic input]
2+
preserve
3+
[clinic start generated code]*/
4+
5+
PyDoc_STRVAR(grp_getgrgid__doc__,
6+
"getgrgid($module, /, id)\n"
7+
"--\n"
8+
"\n"
9+
"Return the group database entry for the given numeric group ID.\n"
10+
"\n"
11+
"If id is not valid, raise KeyError.");
12+
13+
#define GRP_GETGRGID_METHODDEF \
14+
{"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__},
15+
16+
static PyObject *
17+
grp_getgrgid_impl(PyModuleDef *module, PyObject *id);
18+
19+
static PyObject *
20+
grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs)
21+
{
22+
PyObject *return_value = NULL;
23+
static char *_keywords[] = {"id", NULL};
24+
PyObject *id;
25+
26+
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
27+
"O:getgrgid", _keywords,
28+
&id))
29+
goto exit;
30+
return_value = grp_getgrgid_impl(module, id);
31+
32+
exit:
33+
return return_value;
34+
}
35+
36+
PyDoc_STRVAR(grp_getgrnam__doc__,
37+
"getgrnam($module, /, name)\n"
38+
"--\n"
39+
"\n"
40+
"Return the group database entry for the given group name.\n"
41+
"\n"
42+
"If name is not valid, raise KeyError.");
43+
44+
#define GRP_GETGRNAM_METHODDEF \
45+
{"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__},
46+
47+
static PyObject *
48+
grp_getgrnam_impl(PyModuleDef *module, PyObject *name);
49+
50+
static PyObject *
51+
grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs)
52+
{
53+
PyObject *return_value = NULL;
54+
static char *_keywords[] = {"name", NULL};
55+
PyObject *name;
56+
57+
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
58+
"U:getgrnam", _keywords,
59+
&name))
60+
goto exit;
61+
return_value = grp_getgrnam_impl(module, name);
62+
63+
exit:
64+
return return_value;
65+
}
66+
67+
PyDoc_STRVAR(grp_getgrall__doc__,
68+
"getgrall($module, /)\n"
69+
"--\n"
70+
"\n"
71+
"Return a list of all available group entries, in arbitrary order.\n"
72+
"\n"
73+
"An entry whose name starts with \'+\' or \'-\' represents an instruction\n"
74+
"to use YP/NIS and may not be accessible via getgrnam or getgrgid.");
75+
76+
#define GRP_GETGRALL_METHODDEF \
77+
{"getgrall", (PyCFunction)grp_getgrall, METH_NOARGS, grp_getgrall__doc__},
78+
79+
static PyObject *
80+
grp_getgrall_impl(PyModuleDef *module);
81+
82+
static PyObject *
83+
grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
84+
{
85+
return grp_getgrall_impl(module);
86+
}
87+
/*[clinic end generated code: output=4709a6ba40bb8df9 input=a9049054013a1b77]*/

Modules/grpmodule.c

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66

77
#include <grp.h>
88

9+
#include "clinic/grpmodule.c.h"
10+
/*[clinic input]
11+
output preset file
12+
module grp
13+
[clinic start generated code]*/
14+
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=68180a9a9efb8506]*/
15+
916
static PyStructSequence_Field struct_group_type_fields[] = {
1017
{"gr_name", "group name"},
1118
{"gr_passwd", "password"},
@@ -76,14 +83,25 @@ mkgrent(struct group *p)
7683
return v;
7784
}
7885

86+
/*[clinic input]
87+
grp.getgrgid
88+
89+
id: object
90+
91+
Return the group database entry for the given numeric group ID.
92+
93+
If id is not valid, raise KeyError.
94+
[clinic start generated code]*/
95+
7996
static PyObject *
80-
grp_getgrgid(PyObject *self, PyObject *pyo_id)
97+
grp_getgrgid_impl(PyModuleDef *module, PyObject *id)
98+
/*[clinic end generated code: output=8a11f5fdeb8c78a0 input=15fa0e2ccf5cda25]*/
8199
{
82100
PyObject *py_int_id;
83101
gid_t gid;
84102
struct group *p;
85103

86-
py_int_id = PyNumber_Long(pyo_id);
104+
py_int_id = PyNumber_Long(id);
87105
if (!py_int_id)
88106
return NULL;
89107
if (!_Py_Gid_Converter(py_int_id, &gid)) {
@@ -103,22 +121,31 @@ grp_getgrgid(PyObject *self, PyObject *pyo_id)
103121
return mkgrent(p);
104122
}
105123

124+
/*[clinic input]
125+
grp.getgrnam
126+
127+
name: unicode
128+
129+
Return the group database entry for the given group name.
130+
131+
If name is not valid, raise KeyError.
132+
[clinic start generated code]*/
133+
106134
static PyObject *
107-
grp_getgrnam(PyObject *self, PyObject *args)
135+
grp_getgrnam_impl(PyModuleDef *module, PyObject *name)
136+
/*[clinic end generated code: output=cd47511f4854da8e input=08ded29affa3c863]*/
108137
{
109-
char *name;
138+
char *name_chars;
110139
struct group *p;
111-
PyObject *arg, *bytes, *retval = NULL;
140+
PyObject *bytes, *retval = NULL;
112141

113-
if (!PyArg_ParseTuple(args, "U:getgrnam", &arg))
114-
return NULL;
115-
if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL)
142+
if ((bytes = PyUnicode_EncodeFSDefault(name)) == NULL)
116143
return NULL;
117-
if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1)
144+
if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1)
118145
goto out;
119146

120-
if ((p = getgrnam(name)) == NULL) {
121-
PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name);
147+
if ((p = getgrnam(name_chars)) == NULL) {
148+
PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name_chars);
122149
goto out;
123150
}
124151
retval = mkgrent(p);
@@ -127,8 +154,18 @@ grp_getgrnam(PyObject *self, PyObject *args)
127154
return retval;
128155
}
129156

157+
/*[clinic input]
158+
grp.getgrall
159+
160+
Return a list of all available group entries, in arbitrary order.
161+
162+
An entry whose name starts with '+' or '-' represents an instruction
163+
to use YP/NIS and may not be accessible via getgrnam or getgrgid.
164+
[clinic start generated code]*/
165+
130166
static PyObject *
131-
grp_getgrall(PyObject *self, PyObject *ignore)
167+
grp_getgrall_impl(PyModuleDef *module)
168+
/*[clinic end generated code: output=add9037a20c202de input=d7df76c825c367df]*/
132169
{
133170
PyObject *d;
134171
struct group *p;
@@ -151,20 +188,10 @@ grp_getgrall(PyObject *self, PyObject *ignore)
151188
}
152189

153190
static PyMethodDef grp_methods[] = {
154-
{"getgrgid", grp_getgrgid, METH_O,
155-
"getgrgid(id) -> tuple\n\
156-
Return the group database entry for the given numeric group ID. If\n\
157-
id is not valid, raise KeyError."},
158-
{"getgrnam", grp_getgrnam, METH_VARARGS,
159-
"getgrnam(name) -> tuple\n\
160-
Return the group database entry for the given group name. If\n\
161-
name is not valid, raise KeyError."},
162-
{"getgrall", grp_getgrall, METH_NOARGS,
163-
"getgrall() -> list of tuples\n\
164-
Return a list of all available group entries, in arbitrary order.\n\
165-
An entry whose name starts with '+' or '-' represents an instruction\n\
166-
to use YP/NIS and may not be accessible via getgrnam or getgrgid."},
167-
{NULL, NULL} /* sentinel */
191+
GRP_GETGRGID_METHODDEF
192+
GRP_GETGRNAM_METHODDEF
193+
GRP_GETGRALL_METHODDEF
194+
{NULL, NULL}
168195
};
169196

170197
PyDoc_STRVAR(grp__doc__,

0 commit comments

Comments
 (0)