mirror of https://github.com/python/cpython
gh-85283: Convert grp extension to the limited C API (#116611)
posixmodule.h: remove check on the limited C API, since these helpers are not part of the public C API.
This commit is contained in:
parent
ba13215eb1
commit
3cc5ae5c2c
|
@ -983,7 +983,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hi));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hi));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hook));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hook));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hour));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hour));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(id));
|
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ident));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ident));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(identity_hint));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(identity_hint));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ignore));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ignore));
|
||||||
|
|
|
@ -472,7 +472,6 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(hi)
|
STRUCT_FOR_ID(hi)
|
||||||
STRUCT_FOR_ID(hook)
|
STRUCT_FOR_ID(hook)
|
||||||
STRUCT_FOR_ID(hour)
|
STRUCT_FOR_ID(hour)
|
||||||
STRUCT_FOR_ID(id)
|
|
||||||
STRUCT_FOR_ID(ident)
|
STRUCT_FOR_ID(ident)
|
||||||
STRUCT_FOR_ID(identity_hint)
|
STRUCT_FOR_ID(identity_hint)
|
||||||
STRUCT_FOR_ID(ignore)
|
STRUCT_FOR_ID(ignore)
|
||||||
|
|
|
@ -981,7 +981,6 @@ extern "C" {
|
||||||
INIT_ID(hi), \
|
INIT_ID(hi), \
|
||||||
INIT_ID(hook), \
|
INIT_ID(hook), \
|
||||||
INIT_ID(hour), \
|
INIT_ID(hour), \
|
||||||
INIT_ID(id), \
|
|
||||||
INIT_ID(ident), \
|
INIT_ID(ident), \
|
||||||
INIT_ID(identity_hint), \
|
INIT_ID(identity_hint), \
|
||||||
INIT_ID(ignore), \
|
INIT_ID(ignore), \
|
||||||
|
|
|
@ -1257,9 +1257,6 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(hour);
|
string = &_Py_ID(hour);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(id);
|
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
|
||||||
string = &_Py_ID(ident);
|
string = &_Py_ID(ident);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
|
|
@ -2,12 +2,6 @@
|
||||||
preserve
|
preserve
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
||||||
# include "pycore_gc.h" // PyGC_Head
|
|
||||||
# include "pycore_runtime.h" // _Py_ID()
|
|
||||||
#endif
|
|
||||||
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
|
|
||||||
|
|
||||||
PyDoc_STRVAR(grp_getgrgid__doc__,
|
PyDoc_STRVAR(grp_getgrgid__doc__,
|
||||||
"getgrgid($module, /, id)\n"
|
"getgrgid($module, /, id)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -17,48 +11,21 @@ PyDoc_STRVAR(grp_getgrgid__doc__,
|
||||||
"If id is not valid, raise KeyError.");
|
"If id is not valid, raise KeyError.");
|
||||||
|
|
||||||
#define GRP_GETGRGID_METHODDEF \
|
#define GRP_GETGRGID_METHODDEF \
|
||||||
{"getgrgid", _PyCFunction_CAST(grp_getgrgid), METH_FASTCALL|METH_KEYWORDS, grp_getgrgid__doc__},
|
{"getgrgid", (PyCFunction)(void(*)(void))grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__},
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
grp_getgrgid_impl(PyObject *module, PyObject *id);
|
grp_getgrgid_impl(PyObject *module, PyObject *id);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
grp_getgrgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
static char *_keywords[] = {"id", NULL};
|
||||||
|
|
||||||
#define NUM_KEYWORDS 1
|
|
||||||
static struct {
|
|
||||||
PyGC_Head _this_is_not_used;
|
|
||||||
PyObject_VAR_HEAD
|
|
||||||
PyObject *ob_item[NUM_KEYWORDS];
|
|
||||||
} _kwtuple = {
|
|
||||||
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
|
|
||||||
.ob_item = { &_Py_ID(id), },
|
|
||||||
};
|
|
||||||
#undef NUM_KEYWORDS
|
|
||||||
#define KWTUPLE (&_kwtuple.ob_base.ob_base)
|
|
||||||
|
|
||||||
#else // !Py_BUILD_CORE
|
|
||||||
# define KWTUPLE NULL
|
|
||||||
#endif // !Py_BUILD_CORE
|
|
||||||
|
|
||||||
static const char * const _keywords[] = {"id", NULL};
|
|
||||||
static _PyArg_Parser _parser = {
|
|
||||||
.keywords = _keywords,
|
|
||||||
.fname = "getgrgid",
|
|
||||||
.kwtuple = KWTUPLE,
|
|
||||||
};
|
|
||||||
#undef KWTUPLE
|
|
||||||
PyObject *argsbuf[1];
|
|
||||||
PyObject *id;
|
PyObject *id;
|
||||||
|
|
||||||
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:getgrgid", _keywords,
|
||||||
if (!args) {
|
&id))
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
|
||||||
id = args[0];
|
|
||||||
return_value = grp_getgrgid_impl(module, id);
|
return_value = grp_getgrgid_impl(module, id);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
@ -74,52 +41,21 @@ PyDoc_STRVAR(grp_getgrnam__doc__,
|
||||||
"If name is not valid, raise KeyError.");
|
"If name is not valid, raise KeyError.");
|
||||||
|
|
||||||
#define GRP_GETGRNAM_METHODDEF \
|
#define GRP_GETGRNAM_METHODDEF \
|
||||||
{"getgrnam", _PyCFunction_CAST(grp_getgrnam), METH_FASTCALL|METH_KEYWORDS, grp_getgrnam__doc__},
|
{"getgrnam", (PyCFunction)(void(*)(void))grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__},
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
grp_getgrnam_impl(PyObject *module, PyObject *name);
|
grp_getgrnam_impl(PyObject *module, PyObject *name);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
grp_getgrnam(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
static char *_keywords[] = {"name", NULL};
|
||||||
|
|
||||||
#define NUM_KEYWORDS 1
|
|
||||||
static struct {
|
|
||||||
PyGC_Head _this_is_not_used;
|
|
||||||
PyObject_VAR_HEAD
|
|
||||||
PyObject *ob_item[NUM_KEYWORDS];
|
|
||||||
} _kwtuple = {
|
|
||||||
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
|
|
||||||
.ob_item = { &_Py_ID(name), },
|
|
||||||
};
|
|
||||||
#undef NUM_KEYWORDS
|
|
||||||
#define KWTUPLE (&_kwtuple.ob_base.ob_base)
|
|
||||||
|
|
||||||
#else // !Py_BUILD_CORE
|
|
||||||
# define KWTUPLE NULL
|
|
||||||
#endif // !Py_BUILD_CORE
|
|
||||||
|
|
||||||
static const char * const _keywords[] = {"name", NULL};
|
|
||||||
static _PyArg_Parser _parser = {
|
|
||||||
.keywords = _keywords,
|
|
||||||
.fname = "getgrnam",
|
|
||||||
.kwtuple = KWTUPLE,
|
|
||||||
};
|
|
||||||
#undef KWTUPLE
|
|
||||||
PyObject *argsbuf[1];
|
|
||||||
PyObject *name;
|
PyObject *name;
|
||||||
|
|
||||||
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:getgrnam", _keywords,
|
||||||
if (!args) {
|
&name))
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
|
||||||
if (!PyUnicode_Check(args[0])) {
|
|
||||||
_PyArg_BadArgument("getgrnam", "argument 'name'", "str", args[0]);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
name = args[0];
|
|
||||||
return_value = grp_getgrnam_impl(module, name);
|
return_value = grp_getgrnam_impl(module, name);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
@ -146,4 +82,4 @@ grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return grp_getgrall_impl(module);
|
return grp_getgrall_impl(module);
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=2f7011384604d38d input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=81f180beb67fc585 input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
|
|
||||||
/* UNIX group file access module */
|
/* UNIX group file access module */
|
||||||
|
|
||||||
// clinic/grpmodule.c.h uses internal pycore_modsupport.h API
|
// Need limited C API version 3.13 for PyMem_RawRealloc()
|
||||||
#ifndef Py_BUILD_CORE_BUILTIN
|
#include "pyconfig.h" // Py_GIL_DISABLED
|
||||||
# define Py_BUILD_CORE_MODULE 1
|
#ifndef Py_GIL_DISABLED
|
||||||
|
#define Py_LIMITED_API 0x030d0000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "posixmodule.h"
|
#include "posixmodule.h"
|
||||||
|
|
||||||
|
#include <errno.h> // ERANGE
|
||||||
#include <grp.h> // getgrgid_r()
|
#include <grp.h> // getgrgid_r()
|
||||||
|
#include <string.h> // memcpy()
|
||||||
#include <unistd.h> // sysconf()
|
#include <unistd.h> // sysconf()
|
||||||
|
|
||||||
#include "clinic/grpmodule.c.h"
|
#include "clinic/grpmodule.c.h"
|
||||||
|
@ -88,7 +90,7 @@ mkgrent(PyObject *module, struct group *p)
|
||||||
Py_DECREF(x);
|
Py_DECREF(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SET(i,val) PyStructSequence_SET_ITEM(v, i, val)
|
#define SET(i,val) PyStructSequence_SetItem(v, i, val)
|
||||||
SET(setIndex++, PyUnicode_DecodeFSDefault(p->gr_name));
|
SET(setIndex++, PyUnicode_DecodeFSDefault(p->gr_name));
|
||||||
if (p->gr_passwd)
|
if (p->gr_passwd)
|
||||||
SET(setIndex++, PyUnicode_DecodeFSDefault(p->gr_passwd));
|
SET(setIndex++, PyUnicode_DecodeFSDefault(p->gr_passwd));
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
#ifndef Py_POSIXMODULE_H
|
#ifndef Py_POSIXMODULE_H
|
||||||
#define Py_POSIXMODULE_H
|
#define Py_POSIXMODULE_H
|
||||||
#ifndef Py_LIMITED_API
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,5 +33,4 @@ extern int _Py_Sigset_Converter(PyObject *, void *);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // !Py_LIMITED_API
|
|
||||||
#endif // !Py_POSIXMODULE_H
|
#endif // !Py_POSIXMODULE_H
|
||||||
|
|
|
@ -740,3 +740,5 @@ Modules/expat/xmlrole.c - error -
|
||||||
Modules/_io/_iomodule.c - _PyIO_Module -
|
Modules/_io/_iomodule.c - _PyIO_Module -
|
||||||
Modules/_sqlite/module.c - _sqlite3module -
|
Modules/_sqlite/module.c - _sqlite3module -
|
||||||
Modules/clinic/md5module.c.h _md5_md5 _keywords -
|
Modules/clinic/md5module.c.h _md5_md5 _keywords -
|
||||||
|
Modules/clinic/grpmodule.c.h grp_getgrgid _keywords -
|
||||||
|
Modules/clinic/grpmodule.c.h grp_getgrnam _keywords -
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 4.
|
Loading…
Reference in New Issue