Skip to content

Commit

Permalink
bpo-46748: Don't import <stdbool.h> in public headers (GH-31553)
Browse files Browse the repository at this point in the history
<stdbool.h> is the standard/modern way to define embedd/extends Python free to define bool, true and false, but there are existing applications that use slightly different redefinitions, which fail if the header is included.

It's OK to use stdbool outside the public headers, though.

https://bugs.python.org/issue46748
  • Loading branch information
encukou committed Feb 25, 2022
1 parent 98c3bea commit 2c228a7
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Include/cpython/import.h
Expand Up @@ -32,7 +32,7 @@ struct _frozen {
const char *name; /* ASCII encoded string */
const unsigned char *code;
int size;
bool is_package;
int is_package;
PyObject *(*get_code)(void);
};

Expand Down
4 changes: 1 addition & 3 deletions Include/cpython/pystate.h
Expand Up @@ -2,8 +2,6 @@
# error "this header file must not be included directly"
#endif

#include <stdbool.h>


PyAPI_FUNC(int) _PyInterpreterState_RequiresIDRef(PyInterpreterState *);
PyAPI_FUNC(void) _PyInterpreterState_RequireIDRef(PyInterpreterState *, int);
Expand Down Expand Up @@ -93,7 +91,7 @@ struct _ts {
int _initialized;

/* Was this thread state statically allocated? */
bool _static;
int _static;

int recursion_remaining;
int recursion_limit;
Expand Down
@@ -0,0 +1,2 @@
Python's public headers no longer import ``<stdbool.h>``, leaving code that
embedd/extends Python free to define ``bool``, ``true`` and ``false``.
3 changes: 3 additions & 0 deletions Modules/_testcapimodule.c
Expand Up @@ -40,6 +40,9 @@
# error "_testcapi must test the public Python C API, not CPython internal C API"
#endif

#ifdef bool
# error "The public headers should not include <stdbool.h>, see bpo-46748"
#endif

// Forward declarations
static struct PyModuleDef _testcapimodule;
Expand Down
2 changes: 2 additions & 0 deletions Python/frozen.c
Expand Up @@ -38,6 +38,8 @@
#include "Python.h"
#include "pycore_import.h"

#include <stdbool.h>

/* Includes for frozen modules: */
/* End includes */

Expand Down
4 changes: 2 additions & 2 deletions Tools/freeze/makefreeze.py
Expand Up @@ -45,9 +45,9 @@ def makefreeze(base, dict, debug=0, entry_point=None, fail_import=()):
print("freezing", mod, "...")
str = marshal.dumps(m.__code__)
size = len(str)
is_package = 'false'
is_package = '0'
if m.__path__:
is_package = 'true'
is_package = '1'
done.append((mod, mangled, size, is_package))
writecode(outfp, mangled, str)
if debug:
Expand Down

0 comments on commit 2c228a7

Please sign in to comment.