Skip to content

Commit

Permalink
pythongh-85283: Build pwd extension with the limited C API (python#11…
Browse files Browse the repository at this point in the history
…6841)

Argument Clinic now uses the PEP 737 "%T" format to format type name
for the limited C API.
  • Loading branch information
vstinner authored and diegorusso committed Apr 17, 2024
1 parent 8f0eb2c commit 71cfaa4
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1469,7 +1469,7 @@ Build Changes
* Building CPython now requires a compiler with support for the C11 atomic
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``,
``_testimportmultiple`` and ``_uuid`` C extensions are now built with the
:ref:`limited C API <limited-c-api>`.
Expand Down
Original file line number Diff line number Diff line change
@@ -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`.)
6 changes: 2 additions & 4 deletions Modules/clinic/pwdmodule.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion Modules/pwdmodule.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@

/* 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 "posixmodule.h"

#include <errno.h> // ERANGE
#include <pwd.h> // getpwuid()
#include <unistd.h> // sysconf()

Expand Down Expand Up @@ -83,7 +90,7 @@ mkpwent(PyObject *module, struct passwd *p)
if (item == NULL) { \
goto error; \
} \
PyStructSequence_SET_ITEM(v, setIndex++, item); \
PyStructSequence_SetItem(v, setIndex++, item); \
} while(0)

SET_STRING(p->pw_name);
Expand Down
9 changes: 4 additions & 5 deletions Tools/clinic/libclinic/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,13 +426,12 @@ def bad_argument(self, displayname: str, expected: str, *, limited_capi: bool, e
if limited_capi:
if expected_literal:
return (f'PyErr_Format(PyExc_TypeError, '
f'"{{{{name}}}}() {displayname} must be {expected}, not %.50s", '
f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);')
f'"{{{{name}}}}() {displayname} must be {expected}, not %T", '
f'{{argname}});')
else:
return (f'PyErr_Format(PyExc_TypeError, '
f'"{{{{name}}}}() {displayname} must be %.50s, not %.50s", '
f'"{expected}", '
f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);')
f'"{{{{name}}}}() {displayname} must be %s, not %T", '
f'"{expected}", {{argname}});')
else:
if expected_literal:
expected = f'"{expected}"'
Expand Down

0 comments on commit 71cfaa4

Please sign in to comment.