Unverified Kaydet (Commit) 5734f41a authored tarafından Miss Islington (bot)'s avatar Miss Islington (bot) Kaydeden (comit) GitHub

bpo-32493: Fix uuid.uuid1() on FreeBSD. (GH-7099)


Use uuid_enc_be() if available to encode UUID to bytes as big endian.
(cherry picked from commit 17d88303)
Co-authored-by: 's avatarSerhiy Storchaka <storchaka@gmail.com>
üst d9eb22c6
...@@ -18,10 +18,16 @@ py_uuid_generate_time_safe(void) ...@@ -18,10 +18,16 @@ py_uuid_generate_time_safe(void)
res = uuid_generate_time_safe(uuid); res = uuid_generate_time_safe(uuid);
return Py_BuildValue("y#i", (const char *) uuid, sizeof(uuid), res); return Py_BuildValue("y#i", (const char *) uuid, sizeof(uuid), res);
#elif HAVE_UUID_CREATE #elif defined(HAVE_UUID_CREATE)
uint32_t status; uint32_t status;
uuid_create(&uuid, &status); uuid_create(&uuid, &status);
# if defined(HAVE_UUID_ENC_BE)
unsigned char buf[sizeof(uuid)];
uuid_enc_be(buf, &uuid);
return Py_BuildValue("y#i", buf, sizeof(uuid), (int) status);
# else
return Py_BuildValue("y#i", (const char *) &uuid, sizeof(uuid), (int) status); return Py_BuildValue("y#i", (const char *) &uuid, sizeof(uuid), (int) status);
# endif
#else #else
uuid_generate_time(uuid); uuid_generate_time(uuid);
return Py_BuildValue("y#O", (const char *) uuid, sizeof(uuid), Py_None); return Py_BuildValue("y#O", (const char *) uuid, sizeof(uuid), Py_None);
...@@ -57,6 +63,7 @@ PyInit__uuid(void) ...@@ -57,6 +63,7 @@ PyInit__uuid(void)
} }
if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe", if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe",
has_uuid_generate_time_safe) < 0) { has_uuid_generate_time_safe) < 0) {
Py_DECREF(mod);
return NULL; return NULL;
} }
......
...@@ -9625,6 +9625,40 @@ $as_echo "no" >&6; } ...@@ -9625,6 +9625,40 @@ $as_echo "no" >&6; }
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
# Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet
# stream in big-endian byte-order
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_enc_be" >&5
$as_echo_n "checking for uuid_enc_be... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <uuid.h>
int
main ()
{
#ifndef uuid_enc_be
uuid_t uuid;
unsigned char buf[sizeof(uuid)];
uuid_enc_be(buf, &uuid);
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
$as_echo "#define HAVE_UUID_ENC_BE 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
# 'Real Time' functions on Solaris # 'Real Time' functions on Solaris
# posix4 on Solaris 2.6 # posix4 on Solaris 2.6
# pthread (first!) on Linux # pthread (first!) on Linux
......
...@@ -2742,6 +2742,21 @@ void *x = uuid_create ...@@ -2742,6 +2742,21 @@ void *x = uuid_create
[AC_MSG_RESULT(no)] [AC_MSG_RESULT(no)]
) )
# Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet
# stream in big-endian byte-order
AC_MSG_CHECKING(for uuid_enc_be)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uuid.h>]], [[
#ifndef uuid_enc_be
uuid_t uuid;
unsigned char buf[sizeof(uuid)];
uuid_enc_be(buf, &uuid);
#endif
]])],
[AC_DEFINE(HAVE_UUID_ENC_BE, 1, Define if uuid_enc_be() exists.)
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)]
)
# 'Real Time' functions on Solaris # 'Real Time' functions on Solaris
# posix4 on Solaris 2.6 # posix4 on Solaris 2.6
# pthread (first!) on Linux # pthread (first!) on Linux
......
...@@ -1212,6 +1212,9 @@ ...@@ -1212,6 +1212,9 @@
/* Define if uuid_create() exists. */ /* Define if uuid_create() exists. */
#undef HAVE_UUID_CREATE #undef HAVE_UUID_CREATE
/* Define if uuid_enc_be() exists. */
#undef HAVE_UUID_ENC_BE
/* Define if uuid_generate_time_safe() exists. */ /* Define if uuid_generate_time_safe() exists. */
#undef HAVE_UUID_GENERATE_TIME_SAFE #undef HAVE_UUID_GENERATE_TIME_SAFE
......
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