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.
This commit is contained in:
parent
1023dbbcb7
commit
4337a0d995
|
@ -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 @@
|
||||||
#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 = {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue