From 1593d7dcb3302d95e05182bd4d48a65c93476e5f Mon Sep 17 00:00:00 2001 From: miha-q <> Date: Thu, 21 Mar 2024 09:54:52 -0400 Subject: [PATCH] Thu Mar 21 09:54:52 AM EDT 2024 --- src/hardware.c | 30 ++++++++++++++++++++---------- src/hardware.h | 12 ++++-------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/hardware.c b/src/hardware.c index 948df6e..08a0fd0 100644 --- a/src/hardware.c +++ b/src/hardware.c @@ -91,22 +91,32 @@ unsigned char qansel_hardware_rand() float qansel_hardware_getseed() { - #ifdef CLOCK_MONOTONIC - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - float seed = (float)((unsigned long)ts.tv_sec * 1000000000LL + ts.tv_nsec); - #else - FILE* f = popen("date +%s", "r"); + #if defined(_WIN32) || defined(_WIN64) + #error "implement windows seed" + #elif defined(__linux__) + unsigned long long int tsi = 0; + FILE* f = fopen("/proc/uptime", "r"); int c; - int tsl = 0; char ts[128]; - + int tsl = 0; while ( (c = fgetc(f)) != EOF ) { - ts[tsl++] = c; + if ((c >= '0' && c <= '9') || c == '.') + { + ts[tsl++] = c; + } + else + { + break; + } } ts[tsl++] = 0; fclose(f); - float seed = atof(ts); + float seed = atof(ts); + return seed; + #else + #error "Uknown platform" + return 0; #endif + } diff --git a/src/hardware.h b/src/hardware.h index b600597..1d7e17b 100644 --- a/src/hardware.h +++ b/src/hardware.h @@ -1,20 +1,16 @@ #ifndef __HARDWARE_H__ #define __HARDWARE_H__ -#include +#include #include #if defined(_WIN32) || defined(_WIN64) #include #elif defined(__linux__) +#include #include #include -#elif defined(__APPLE__) -#include -#endif - -#ifndef CLOCK_MONOTONIC -#include -#include +#else +#error "Unknown platform" #endif int qansel___get_core_count(); -- 2.39.5