From e913a0cca07fa25370139304bb52f122e96f8cc1 Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Fri, 18 Jul 2025 17:03:38 -0400 Subject: [PATCH] contrib: Re-apply uuid changes This all appear to be RTEMS-local changes I looked at some other revisions and didn't see some of the ones that may have not been local. --- contrib/cpukit/uuid/clear.c | 6 +++- contrib/cpukit/uuid/compare.c | 6 +++- contrib/cpukit/uuid/copy.c | 4 +++ contrib/cpukit/uuid/gen_uuid.c | 58 +++++++++++++++++++++++++++++---- contrib/cpukit/uuid/isnull.c | 4 +++ contrib/cpukit/uuid/pack.c | 4 +++ contrib/cpukit/uuid/parse.c | 6 +++- contrib/cpukit/uuid/unpack.c | 4 +++ contrib/cpukit/uuid/unparse.c | 4 +++ contrib/cpukit/uuid/uuidP.h | 2 +- contrib/cpukit/uuid/uuid_time.c | 6 +++- 11 files changed, 92 insertions(+), 12 deletions(-) diff --git a/contrib/cpukit/uuid/clear.c b/contrib/cpukit/uuid/clear.c index 2d91fee939..5a1d188f6e 100644 --- a/contrib/cpukit/uuid/clear.c +++ b/contrib/cpukit/uuid/clear.c @@ -32,7 +32,11 @@ * %End-Header% */ -#include "string.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include #include "uuidP.h" diff --git a/contrib/cpukit/uuid/compare.c b/contrib/cpukit/uuid/compare.c index f28a72678c..888121f0ff 100644 --- a/contrib/cpukit/uuid/compare.c +++ b/contrib/cpukit/uuid/compare.c @@ -34,8 +34,12 @@ * %End-Header% */ -#include "uuidP.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include +#include "uuidP.h" #define UUCMP(u1,u2) if (u1 != u2) return((u1 < u2) ? -1 : 1); diff --git a/contrib/cpukit/uuid/copy.c b/contrib/cpukit/uuid/copy.c index ead33aa26e..abf09d6fb3 100644 --- a/contrib/cpukit/uuid/copy.c +++ b/contrib/cpukit/uuid/copy.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "uuidP.h" void uuid_copy(uuid_t dst, const uuid_t src) diff --git a/contrib/cpukit/uuid/gen_uuid.c b/contrib/cpukit/uuid/gen_uuid.c index b7a12eedfb..5601c887c9 100644 --- a/contrib/cpukit/uuid/gen_uuid.c +++ b/contrib/cpukit/uuid/gen_uuid.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + /* * Force inclusion of SVID stuff since we need it if we're compiling in * gcc-wall wall mode @@ -44,6 +48,7 @@ #define UUID MYUUID #endif #include +#include /* for CHAR_BIT */ #ifdef HAVE_UNISTD_H #include #endif @@ -90,6 +95,18 @@ #include #endif +#if SIZEOF_TIME_T == 8 +#define PRIutime_t PRIu64 +#define SCNutime_t SCNu64 +#define utime_t uint64_t +#elif SIZEOF_TIME_T == 4 +#define PRIutime_t PRIu32 +#define SCNutime_t SCNu32 +#define utime_t uint32_t +#else +#error "unsupport size of time_t" +#endif + #include "uuidP.h" #include "uuidd.h" @@ -110,7 +127,7 @@ THREAD_LOCAL unsigned short jrand_seed[3]; #endif #ifdef _WIN32 -static void gettimeofday (struct timeval *tv, void *dummy) +static void gettimeofday (struct timeval *__restrict tv, void *__restrict dummy) { FILETIME ftime; uint64_t n; @@ -148,10 +165,18 @@ static int get_random_fd(void) if (fd >= 0) { i = fcntl(fd, F_GETFD); if (i >= 0) + #ifdef __rtems__ + (void) + #endif fcntl(fd, F_SETFD, i | FD_CLOEXEC); } #endif - srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); +#ifdef __rtems__ + srand((((time_t)getpid()) << ((sizeof(pid_t)*CHAR_BIT)>>1)) ^ getuid() + ^ tv.tv_sec ^ tv.tv_usec); +#else + srand((getpid() << ((sizeof(pid_t)*CHAR_BIT)>>1)) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); +#endif #ifdef DO_JRAND_MIX jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF); jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF); @@ -175,7 +200,9 @@ static void get_random_bytes(void *buf, int nbytes) int i, n = nbytes, fd = get_random_fd(); int lose_counter = 0; unsigned char *cp = (unsigned char *) buf; +#ifdef DO_JRAND_MIX unsigned short tmp_seed[3]; +#endif if (fd >= 0) { while (n > 0) { @@ -321,11 +348,17 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low, state_fd = open("/var/lib/libuuid/clock.txt", O_RDWR|O_CREAT, 0660); (void) umask(save_umask); +#ifdef __rtems__ + if (state_fd >= 0) { +#endif state_f = fdopen(state_fd, "r+"); if (!state_f) { close(state_fd); state_fd = -1; } +#ifdef __rtems__ + } +#endif } fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; @@ -345,10 +378,11 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low, } if (state_fd >= 0) { unsigned int cl; - unsigned long tv1, tv2; + utime_t tv1; + unsigned long tv2; int a; - if (fscanf(state_f, "clock: %04x tv: %lu %lu adj: %d\n", + if (fscanf(state_f, "clock: %04x tv: %" SCNutime_t " %lu adj: %d\n", &cl, &tv1, &tv2, &a) == 4) { clock_seq = cl & 0x3FFF; last.tv_sec = tv1; @@ -382,7 +416,7 @@ try_again: last = tv; } - clock_reg = tv.tv_usec*10 + adjustment; + clock_reg = ((uint64_t) tv.tv_usec)*10 + adjustment; clock_reg += ((uint64_t) tv.tv_sec)*10000000; clock_reg += (((uint64_t) 0x01B21DD2) << 32) + 0x13814000; @@ -396,8 +430,8 @@ try_again: if (state_fd > 0) { rewind(state_f); - len = fprintf(state_f, - "clock: %04x tv: %016lu %08lu adj: %08d\n", + len = fprintf(state_f, + "clock: %04x tv: %016" PRIutime_t " %08lu adj: %08d\n", clock_seq, last.tv_sec, last.tv_usec, adjustment); fflush(state_f); if (ftruncate(state_fd, len) < 0) { @@ -406,6 +440,9 @@ try_again: } rewind(state_f); fl.l_type = F_UNLCK; + #ifdef __rtems__ + (void) + #endif fcntl(state_fd, F_SETLK, &fl); } @@ -415,6 +452,8 @@ try_again: return 0; } +/* unused */ +#if defined(USE_UUIDD) && defined(HAVE_SYS_UN_H) static ssize_t read_all(int fd, char *buf, size_t count) { ssize_t ret; @@ -434,6 +473,9 @@ static ssize_t read_all(int fd, char *buf, size_t count) } return c; } +#endif + +#if defined(USE_UUIDD) && defined(HAVE_SYS_UN_H) /* * Close all file descriptors @@ -459,6 +501,8 @@ static void close_all_fds(void) close(i); } +#endif + /* * Try using the uuidd daemon to generate the UUID diff --git a/contrib/cpukit/uuid/isnull.c b/contrib/cpukit/uuid/isnull.c index 931e7e7dba..11bd765d98 100644 --- a/contrib/cpukit/uuid/isnull.c +++ b/contrib/cpukit/uuid/isnull.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "uuidP.h" /* Returns 1 if the uuid is the NULL uuid */ diff --git a/contrib/cpukit/uuid/pack.c b/contrib/cpukit/uuid/pack.c index 097516d2e2..d4c9955374 100644 --- a/contrib/cpukit/uuid/pack.c +++ b/contrib/cpukit/uuid/pack.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include "uuidP.h" diff --git a/contrib/cpukit/uuid/parse.c b/contrib/cpukit/uuid/parse.c index 074383efae..d995df1db0 100644 --- a/contrib/cpukit/uuid/parse.c +++ b/contrib/cpukit/uuid/parse.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include @@ -59,7 +63,7 @@ int uuid_parse(const char *in, uuid_t uu) if (i== 36) if (*cp == 0) continue; - if (!isxdigit(*cp)) + if (!isxdigit((unsigned char)*cp)) return -1; } uuid.time_low = strtoul(in, NULL, 16); diff --git a/contrib/cpukit/uuid/unpack.c b/contrib/cpukit/uuid/unpack.c index beaaff3ca8..4520633b7e 100644 --- a/contrib/cpukit/uuid/unpack.c +++ b/contrib/cpukit/uuid/unpack.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include "uuidP.h" diff --git a/contrib/cpukit/uuid/unparse.c b/contrib/cpukit/uuid/unparse.c index a95bbb0425..25cf07dc78 100644 --- a/contrib/cpukit/uuid/unparse.c +++ b/contrib/cpukit/uuid/unparse.c @@ -32,6 +32,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include "uuidP.h" diff --git a/contrib/cpukit/uuid/uuidP.h b/contrib/cpukit/uuid/uuidP.h index d0e24c6942..e897bbb4e5 100644 --- a/contrib/cpukit/uuid/uuidP.h +++ b/contrib/cpukit/uuid/uuidP.h @@ -39,7 +39,7 @@ #endif #include -#include "uuid.h" +#include /* * Offset between 15-Oct-1582 and 1-Jan-70 diff --git a/contrib/cpukit/uuid/uuid_time.c b/contrib/cpukit/uuid/uuid_time.c index f25f5c90fe..f9325968df 100644 --- a/contrib/cpukit/uuid/uuid_time.c +++ b/contrib/cpukit/uuid/uuid_time.c @@ -34,6 +34,10 @@ * %End-Header% */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef _WIN32 #define _WIN32_WINNT 0x0500 #include @@ -62,7 +66,7 @@ time_t uuid_time(const uuid_t uu, struct timeval *ret_tv) uuid_unpack(uu, &uuid); - high = uuid.time_mid | ((uuid.time_hi_and_version & 0xFFF) << 16); + high = uuid.time_mid | ((uint32_t)(uuid.time_hi_and_version & 0xFFF) << 16); clock_reg = uuid.time_low | ((uint64_t) high << 32); clock_reg -= (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;