Skip to content

Commit 4337a0d

Browse files
authored
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.
1 parent 1023dbb commit 4337a0d

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

‎Lib/uuid.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ def _load_system_functions():
509509
pass
510510
elif _uuid is not None:
511511
_generate_time_safe = _uuid.generate_time_safe
512-
_has_uuid_generate_time_safe = True
512+
_has_uuid_generate_time_safe = _uuid.has_uuid_generate_time_safe
513513
return
514514

515515
try:

‎Modules/_uuidmodule.c‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,27 @@
44
#include <uuid/uuid.h>
55

66

7+
/* bpo-11063: libuuid on macOS doesn't provide uuid_generate_time_safe(),
8+
only uuid_generate_time(). */
9+
#ifndef __APPLE__
10+
# define HAVE_TIME_SAFE
11+
#endif
12+
13+
714
static PyObject *
815
py_uuid_generate_time_safe(void)
916
{
17+
#ifdef HAVE_TIME_SAFE
1018
uuid_t out;
1119
int res;
1220

1321
res = uuid_generate_time_safe(out);
1422
return Py_BuildValue("y#i", (const char *) out, sizeof(out), res);
23+
#else
24+
uuid_t out;
25+
uuid_generate_time(out);
26+
return Py_BuildValue("y#O", (const char *) out, sizeof(out), Py_None);
27+
#endif
1528
}
1629

1730

@@ -30,6 +43,21 @@ static struct PyModuleDef uuidmodule = {
3043
PyMODINIT_FUNC
3144
PyInit__uuid(void)
3245
{
46+
PyObject *mod;
3347
assert(sizeof(uuid_t) == 16);
34-
return PyModule_Create(&uuidmodule);
48+
#ifdef HAVE_TIME_SAFE
49+
int has_uuid_generate_time_safe = 1;
50+
#else
51+
int has_uuid_generate_time_safe = 0;
52+
#endif
53+
mod = PyModule_Create(&uuidmodule);
54+
if (mod == NULL) {
55+
return NULL;
56+
}
57+
if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe",
58+
has_uuid_generate_time_safe) < 0) {
59+
return NULL;
60+
}
61+
62+
return mod;
3563
}

0 commit comments

Comments
 (0)