mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-85283: Build pwd extension with the limited C API (#116841)
Argument Clinic now uses the PEP 737 "%T" format to format type name for the limited C API.
This commit is contained in:
parent
41e844a4ac
commit
8fc8fbb43a
5 changed files with 16 additions and 12 deletions
|
@ -1469,7 +1469,7 @@ Build Changes
|
||||||
* Building CPython now requires a compiler with support for the C11 atomic
|
* Building CPython now requires a compiler with support for the C11 atomic
|
||||||
library, GCC built-in atomic functions, or MSVC interlocked intrinsics.
|
library, GCC built-in atomic functions, or MSVC interlocked intrinsics.
|
||||||
|
|
||||||
* The ``errno``, ``fcntl``, ``grp``, ``md5``, ``resource``, ``winsound``,
|
* The ``errno``, ``fcntl``, ``grp``, ``md5``, ``pwd``, ``resource``, ``winsound``,
|
||||||
``_ctypes_test``, ``_multiprocessing.posixshmem``, ``_scproxy``, ``_stat``,
|
``_ctypes_test``, ``_multiprocessing.posixshmem``, ``_scproxy``, ``_stat``,
|
||||||
``_testimportmultiple`` and ``_uuid`` C extensions are now built with the
|
``_testimportmultiple`` and ``_uuid`` C extensions are now built with the
|
||||||
:ref:`limited C API <limited-c-api>`.
|
:ref:`limited C API <limited-c-api>`.
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
The ``fcntl`` and ``grp`` C extensions are now built with the :ref:`limited
|
The ``fcntl``, ``grp`` and ``pwd`` C extensions are now built with the :ref:`limited
|
||||||
C API <limited-c-api>`. (Contributed by Victor Stinner in :gh:`85283`.)
|
C API <limited-c-api>`. (Contributed by Victor Stinner in :gh:`85283`.)
|
||||||
|
|
6
Modules/clinic/pwdmodule.c.h
generated
6
Modules/clinic/pwdmodule.c.h
generated
|
@ -2,8 +2,6 @@
|
||||||
preserve
|
preserve
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
#include "pycore_modsupport.h" // _PyArg_BadArgument()
|
|
||||||
|
|
||||||
PyDoc_STRVAR(pwd_getpwuid__doc__,
|
PyDoc_STRVAR(pwd_getpwuid__doc__,
|
||||||
"getpwuid($module, uidobj, /)\n"
|
"getpwuid($module, uidobj, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -36,7 +34,7 @@ pwd_getpwnam(PyObject *module, PyObject *arg)
|
||||||
PyObject *name;
|
PyObject *name;
|
||||||
|
|
||||||
if (!PyUnicode_Check(arg)) {
|
if (!PyUnicode_Check(arg)) {
|
||||||
_PyArg_BadArgument("getpwnam", "argument", "str", arg);
|
PyErr_Format(PyExc_TypeError, "getpwnam() argument must be str, not %T", arg);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
name = arg;
|
name = arg;
|
||||||
|
@ -73,4 +71,4 @@ pwd_getpwall(PyObject *module, PyObject *Py_UNUSED(ignored))
|
||||||
#ifndef PWD_GETPWALL_METHODDEF
|
#ifndef PWD_GETPWALL_METHODDEF
|
||||||
#define PWD_GETPWALL_METHODDEF
|
#define PWD_GETPWALL_METHODDEF
|
||||||
#endif /* !defined(PWD_GETPWALL_METHODDEF) */
|
#endif /* !defined(PWD_GETPWALL_METHODDEF) */
|
||||||
/*[clinic end generated code: output=5a8fb12939ff4ea3 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=dac88d500f6d6f49 input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
|
|
||||||
/* UNIX password file access module */
|
/* UNIX password file access module */
|
||||||
|
|
||||||
|
// Need limited C API version 3.13 for PyMem_RawRealloc()
|
||||||
|
#include "pyconfig.h" // Py_GIL_DISABLED
|
||||||
|
#ifndef Py_GIL_DISABLED
|
||||||
|
# define Py_LIMITED_API 0x030d0000
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "posixmodule.h"
|
#include "posixmodule.h"
|
||||||
|
|
||||||
|
#include <errno.h> // ERANGE
|
||||||
#include <pwd.h> // getpwuid()
|
#include <pwd.h> // getpwuid()
|
||||||
#include <unistd.h> // sysconf()
|
#include <unistd.h> // sysconf()
|
||||||
|
|
||||||
|
@ -83,7 +90,7 @@ mkpwent(PyObject *module, struct passwd *p)
|
||||||
if (item == NULL) { \
|
if (item == NULL) { \
|
||||||
goto error; \
|
goto error; \
|
||||||
} \
|
} \
|
||||||
PyStructSequence_SET_ITEM(v, setIndex++, item); \
|
PyStructSequence_SetItem(v, setIndex++, item); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
SET_STRING(p->pw_name);
|
SET_STRING(p->pw_name);
|
||||||
|
|
|
@ -426,13 +426,12 @@ class CConverter(metaclass=CConverterAutoRegister):
|
||||||
if limited_capi:
|
if limited_capi:
|
||||||
if expected_literal:
|
if expected_literal:
|
||||||
return (f'PyErr_Format(PyExc_TypeError, '
|
return (f'PyErr_Format(PyExc_TypeError, '
|
||||||
f'"{{{{name}}}}() {displayname} must be {expected}, not %.50s", '
|
f'"{{{{name}}}}() {displayname} must be {expected}, not %T", '
|
||||||
f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);')
|
f'{{argname}});')
|
||||||
else:
|
else:
|
||||||
return (f'PyErr_Format(PyExc_TypeError, '
|
return (f'PyErr_Format(PyExc_TypeError, '
|
||||||
f'"{{{{name}}}}() {displayname} must be %.50s, not %.50s", '
|
f'"{{{{name}}}}() {displayname} must be %s, not %T", '
|
||||||
f'"{expected}", '
|
f'"{expected}", {{argname}});')
|
||||||
f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);')
|
|
||||||
else:
|
else:
|
||||||
if expected_literal:
|
if expected_literal:
|
||||||
expected = f'"{expected}"'
|
expected = f'"{expected}"'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue