diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/series | 1 | ||||
-rw-r--r-- | debian/patches/upstream/libuuid-Add-uuid_time64-for-64bit-time_t-on-32bit.patch | 129 |
2 files changed, 130 insertions, 0 deletions
diff --git a/debian/patches/series b/debian/patches/series index 79a5537..73a5741 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -13,3 +13,4 @@ upstream/setarch-add-riscv64-riscv32-support.patch upstream/cfdisk-fix-menu-behavior-after-writing-changes.patch upstream/fincore-tests-also-use-nosize-error-file.patch upstream/build-only-build-test_enosys-if-an-audit-arch-exists.patch +upstream/libuuid-Add-uuid_time64-for-64bit-time_t-on-32bit.patch diff --git a/debian/patches/upstream/libuuid-Add-uuid_time64-for-64bit-time_t-on-32bit.patch b/debian/patches/upstream/libuuid-Add-uuid_time64-for-64bit-time_t-on-32bit.patch new file mode 100644 index 0000000..84a2a0e --- /dev/null +++ b/debian/patches/upstream/libuuid-Add-uuid_time64-for-64bit-time_t-on-32bit.patch @@ -0,0 +1,129 @@ +From: Thorsten Kukuk <kukuk@suse.com> +Date: Thu, 30 Nov 2023 16:28:53 +0100 +Subject: libuuid: Add uuid_time64 for 64bit time_t on 32bit + +Signed-off-by: Thorsten Kukuk <kukuk@suse.com> +--- + libuuid/src/libuuid.sym | 9 ++++++++ + libuuid/src/uuid.h | 3 +++ + libuuid/src/uuid_time.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++- + 3 files changed, 70 insertions(+), 1 deletion(-) + +diff --git a/libuuid/src/libuuid.sym b/libuuid/src/libuuid.sym +index 96372a8..0f67ede 100644 +--- a/libuuid/src/libuuid.sym ++++ b/libuuid/src/libuuid.sym +@@ -52,6 +52,15 @@ global: + uuid_parse_range; + } UUID_2.31; + ++/* ++ * version(s) since util-linux.2.40 ++ */ ++UUID_2.40 { ++global: ++ uuid_time64; /* only on 32bit architectures with 64bit time_t */ ++} UUID_2.36; ++ ++ + + /* + * __uuid_* this is not part of the official API, this is +diff --git a/libuuid/src/uuid.h b/libuuid/src/uuid.h +index e791abf..2e3642c 100644 +--- a/libuuid/src/uuid.h ++++ b/libuuid/src/uuid.h +@@ -109,6 +109,9 @@ extern void uuid_unparse_lower(const uuid_t uu, char *out); + extern void uuid_unparse_upper(const uuid_t uu, char *out); + + /* uuid_time.c */ ++#if defined(__USE_TIME_BITS64) && defined(__GLIBC__) ++# define uuid_time uuid_time64 ++#endif + extern time_t uuid_time(const uuid_t uu, struct timeval *ret_tv); + extern int uuid_type(const uuid_t uu); + extern int uuid_variant(const uuid_t uu); +diff --git a/libuuid/src/uuid_time.c b/libuuid/src/uuid_time.c +index 6f07d51..9b415b3 100644 +--- a/libuuid/src/uuid_time.c ++++ b/libuuid/src/uuid_time.c +@@ -40,6 +40,7 @@ + #define UUID MYUUID + #endif + ++#include <errno.h> + #include <stdio.h> + #ifdef HAVE_UNISTD_H + #include <unistd.h> +@@ -53,7 +54,15 @@ + + #include "uuidP.h" + +-time_t uuid_time(const uuid_t uu, struct timeval *ret_tv) ++#undef uuid_time ++ ++/* prototype to make compiler happy */ ++time_t __uuid_time(const uuid_t uu, struct timeval *ret_tv); ++ ++ ++/* this function could be 32bit time_t and 32bit timeval or 64bit, ++ depending on compiler flags and architecture. */ ++time_t __uuid_time(const uuid_t uu, struct timeval *ret_tv) + { + struct timeval tv; + struct uuid uuid; +@@ -74,6 +83,54 @@ time_t uuid_time(const uuid_t uu, struct timeval *ret_tv) + + return tv.tv_sec; + } ++#if defined(__USE_TIME_BITS64) && defined(__GLIBC__) ++extern time_t uuid_time64(const uuid_t uu, struct timeval *ret_tv) __attribute__((weak, alias("__uuid_time"))); ++#else ++extern time_t uuid_time(const uuid_t uu, struct timeval *ret_tv) __attribute__((weak, alias("__uuid_time"))); ++#endif ++ ++#if defined(__USE_TIME_BITS64) && defined(__GLIBC__) ++struct timeval32 ++{ ++ int32_t tv_sec; ++ int32_t tv_usec; ++}; ++ ++/* prototype to make compiler happy */ ++int32_t __uuid_time32(const uuid_t uu, struct timeval32 *ret_tv); ++ ++/* Check whether time fits in 32bit time_t. */ ++static inline int ++in_time32_t_range(time_t t) ++{ ++ int32_t s; ++ ++ s = t; ++ ++ return s == t; ++} ++ ++int32_t __uuid_time32(const uuid_t uu, struct timeval32 *ret_tv) ++{ ++ struct timeval tv; ++ time_t ret_time = __uuid_time(uu, &tv); ++ ++ if (! in_time32_t_range(ret_time)) { ++ ret_tv->tv_sec = -1; ++ ret_tv->tv_usec = -1; ++ errno = EOVERFLOW; ++ return -1; ++ } ++ ++ if (ret_tv) { ++ ret_tv->tv_sec = tv.tv_sec; ++ ret_tv->tv_usec = tv.tv_usec; ++ } ++ ++ return tv.tv_sec; ++} ++extern int32_t uuid_time(const uuid_t uu, struct timeval32 *ret_tv) __attribute__((weak, alias("__uuid_time32"))); ++#endif + + int uuid_type(const uuid_t uu) + { |