Commit 4337a0d9 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-11063: Fix _uuid module on macOS (#3855)

On macOS, use uuid_generate_time() instead of
uuid_generate_time_safe() of libuuid, since uuid_generate_time_safe()
is not available.
parent 1023dbbc
...@@ -509,7 +509,7 @@ def _load_system_functions(): ...@@ -509,7 +509,7 @@ def _load_system_functions():
pass pass
elif _uuid is not None: elif _uuid is not None:
_generate_time_safe = _uuid.generate_time_safe _generate_time_safe = _uuid.generate_time_safe
_has_uuid_generate_time_safe = True _has_uuid_generate_time_safe = _uuid.has_uuid_generate_time_safe
return return
try: try:
......
...@@ -4,14 +4,27 @@ ...@@ -4,14 +4,27 @@
#include <uuid/uuid.h> #include <uuid/uuid.h>
/* bpo-11063: libuuid on macOS doesn't provide uuid_generate_time_safe(),
only uuid_generate_time(). */
#ifndef __APPLE__
# define HAVE_TIME_SAFE
#endif
static PyObject * static PyObject *
py_uuid_generate_time_safe(void) py_uuid_generate_time_safe(void)
{ {
#ifdef HAVE_TIME_SAFE
uuid_t out; uuid_t out;
int res; int res;
res = uuid_generate_time_safe(out); res = uuid_generate_time_safe(out);
return Py_BuildValue("y#i", (const char *) out, sizeof(out), res); return Py_BuildValue("y#i", (const char *) out, sizeof(out), res);
#else
uuid_t out;
uuid_generate_time(out);
return Py_BuildValue("y#O", (const char *) out, sizeof(out), Py_None);
#endif
} }
...@@ -30,6 +43,21 @@ static struct PyModuleDef uuidmodule = { ...@@ -30,6 +43,21 @@ static struct PyModuleDef uuidmodule = {
PyMODINIT_FUNC PyMODINIT_FUNC
PyInit__uuid(void) PyInit__uuid(void)
{ {
PyObject *mod;
assert(sizeof(uuid_t) == 16); assert(sizeof(uuid_t) == 16);
return PyModule_Create(&uuidmodule); #ifdef HAVE_TIME_SAFE
int has_uuid_generate_time_safe = 1;
#else
int has_uuid_generate_time_safe = 0;
#endif
mod = PyModule_Create(&uuidmodule);
if (mod == NULL) {
return NULL;
}
if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe",
has_uuid_generate_time_safe) < 0) {
return NULL;
}
return mod;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment