From 0a78acf4dd19af895d02ff9e28f1c8f33581c0e6 Mon Sep 17 00:00:00 2001 From: Ralph Sennhauser Date: Tue, 15 Jul 2025 19:24:51 +0200 Subject: [PATCH] Drop header lib/posix/posix_time.h Only used for timespec which is in since C++17. All other uses were already obsolete with C++11 so remove the header wrapper. Signed-off-by: Ralph Sennhauser --- source/lib/posix/posix.h | 1 - source/lib/posix/posix_time.h | 27 - source/lib/sysdep/os/win/wposix/waio.h | 5 +- source/lib/sysdep/os/win/wposix/wpthread.cpp | 3 +- source/lib/sysdep/os/win/wposix/wtime.cpp | 556 ------------------ source/lib/sysdep/os/win/wposix/wtime.h | 55 -- .../lib/sysdep/os/win/wposix/wtime_internal.h | 33 -- source/lib/timer.cpp | 1 - 8 files changed, 5 insertions(+), 676 deletions(-) delete mode 100644 source/lib/posix/posix_time.h delete mode 100644 source/lib/sysdep/os/win/wposix/wtime.cpp delete mode 100644 source/lib/sysdep/os/win/wposix/wtime.h delete mode 100644 source/lib/sysdep/os/win/wposix/wtime_internal.h diff --git a/source/lib/posix/posix.h b/source/lib/posix/posix.h index 230c454e71..f50941f881 100644 --- a/source/lib/posix/posix.h +++ b/source/lib/posix/posix.h @@ -71,7 +71,6 @@ need only be renamed (e.g. _open, _stat). //#include "lib/posix/posix_dlfcn.h" //#include "lib/posix/posix_filesystem.h" //#include "lib/posix/posix_mman.h" -//#include "lib/posix/posix_time.h" //#include "lib/posix/posix_utsname.h" diff --git a/source/lib/posix/posix_time.h b/source/lib/posix/posix_time.h deleted file mode 100644 index e84b9ffb0b..0000000000 --- a/source/lib/posix/posix_time.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2010 Wildfire Games. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#if OS_WIN -# include "lib/sysdep/os/win/wposix/wtime.h" -#else -# include -#endif diff --git a/source/lib/sysdep/os/win/wposix/waio.h b/source/lib/sysdep/os/win/wposix/waio.h index 736f93805b..0efb24f53e 100644 --- a/source/lib/sysdep/os/win/wposix/waio.h +++ b/source/lib/sysdep/os/win/wposix/waio.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2022 Wildfire Games. +/* Copyright (C) 2025 Wildfire Games. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -29,9 +29,10 @@ #include "lib/status.h" #include "lib/os_path.h" -#include "lib/posix/posix_time.h" // timespec #include "lib/sysdep/os/win/wposix/wposix_types.h" +#include + // Note: transfer buffers, offsets, and lengths must be sector-aligned // (we don't bother copying to an align buffer because our block cache // already requires splitting IOs into naturally-aligned blocks) diff --git a/source/lib/sysdep/os/win/wposix/wpthread.cpp b/source/lib/sysdep/os/win/wposix/wpthread.cpp index bff673f543..6786f74873 100644 --- a/source/lib/sysdep/os/win/wposix/wpthread.cpp +++ b/source/lib/sysdep/os/win/wposix/wpthread.cpp @@ -32,9 +32,10 @@ #include "lib/posix/posix_filesystem.h" // O_CREAT #include "lib/sysdep/os/win/wposix/wposix_internal.h" -#include "lib/sysdep/os/win/wposix/wtime.h" // timespec #include "lib/sysdep/os/win/wseh.h" // wseh_ExceptionFilter +#include + namespace { diff --git a/source/lib/sysdep/os/win/wposix/wtime.cpp b/source/lib/sysdep/os/win/wposix/wtime.cpp deleted file mode 100644 index 2063f4b3a4..0000000000 --- a/source/lib/sysdep/os/win/wposix/wtime.cpp +++ /dev/null @@ -1,556 +0,0 @@ -/* Copyright (C) 2023 Wildfire Games. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * emulate POSIX time functionality on Windows. - */ - - -#include "precompiled.h" -#include "lib/sysdep/os/win/wposix/wtime.h" - -#include "lib/sysdep/os/win/wposix/wposix_internal.h" - -#include - -// NT system time and FILETIME are hectonanoseconds since Jan. 1, 1601 UTC. -// SYSTEMTIME is a struct containing month, year, etc. - -static const long _1e3 = 1000; -static const long _1e6 = 1000000; -static const long _1e7 = 10000000; -static const i64 _1e9 = 1000000000; - - -// -// FILETIME -> time_t routines; used by wposix filetime_to_time_t wrapper. -// - -// hectonanoseconds between Windows and POSIX epoch -static const u64 posix_epoch_hns = 0x019DB1DED53E8000; - -// this function avoids the pitfall of casting FILETIME* to u64*, -// which is not safe due to differing alignment guarantees! -// on some platforms, that would result in an exception. -static u64 u64_from_FILETIME(const FILETIME* ft) -{ - return u64_from_u32(ft->dwHighDateTime, ft->dwLowDateTime); -} - - -// convert UTC FILETIME to seconds-since-1970 UTC: -// we just have to subtract POSIX epoch and scale down to units of seconds. -// -// used by wfilesystem. -// -// note: RtlTimeToSecondsSince1970 isn't officially documented, -// so don't use that. -time_t wtime_utc_filetime_to_time_t(FILETIME* ft) -{ - u64 hns = u64_from_FILETIME(ft); - u64 s = (hns - posix_epoch_hns) / _1e7; - return (time_t)(s & 0xFFFFFFFF); -} - - -//----------------------------------------------------------------------------- - -static size_t MsFromTimespec(const timespec& ts) -{ - i64 ms = ts.tv_sec; // avoid overflow - ms *= _1e3; - ms += ts.tv_nsec / _1e6; - return size_t(ms); -} - -int nanosleep(const struct timespec* rqtp, struct timespec* /* rmtp */) -{ - const DWORD ms = (DWORD)MsFromTimespec(*rqtp); - if(ms) - Sleep(ms); - return 0; -} - - -unsigned sleep(unsigned sec) -{ - // warn if overflow would result (it would be insane to ask for - // such lengthy sleep timeouts, but still) - ENSURE(sec < std::numeric_limits::max()/1000); - - const DWORD ms = sec * 1000; - if(ms) - Sleep(ms); - return sec; -} - - -int usleep(useconds_t us) -{ - ENSURE(us < _1e6); - - const DWORD ms = us/1000; - if(ms) - Sleep(ms); - return 0; -} - - -//----------------------------------------------------------------------------- -// strptime from NetBSD - -/* -* Copyright (c) 1999 Kungliga Tekniska Hogskolan -* (Royal Institute of Technology, Stockholm, Sweden). -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* -* 3. Neither the name of KTH nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -static const char *abb_weekdays[] = { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - NULL -}; - -static const char *full_weekdays[] = { - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - NULL -}; - -static const char *abb_month[] = { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - NULL -}; - -static const char *full_month[] = { - "January", - "February", - "Mars", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December", - NULL, -}; - -static const char *ampm[] = { - "am", - "pm", - NULL -}; - -/* -* Try to match `*buf' to one of the strings in `strs'. Return the -* index of the matching string (or -1 if none). Also advance buf. -*/ - -static int -match_string (const char **buf, const char **strs) -{ - int i = 0; - - for (i = 0; strs[i] != NULL; ++i) { - size_t len = strlen (strs[i]); - - if (strncasecmp (*buf, strs[i], len) == 0) { - *buf += len; - return i; - } - } - return -1; -} - -/* -* tm_year is relative this year */ - -const int tm_year_base = 1900; - -/* -* Return TRUE iff `year' was a leap year. -*/ - -static int -is_leap_year (int year) -{ - return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0); -} - -/* -* Return the weekday [0,6] (0 = Sunday) of the first day of `year' -*/ - -static int -first_day (int year) -{ - int ret = 4; - - for (; year > 1970; --year) - ret = (ret + 365 + is_leap_year (year) ? 1 : 0) % 7; - return ret; -} - -/* -* Set `timeptr' given `wnum' (week number [0, 53]) -*/ - -static void -set_week_number_sun (struct tm *timeptr, int wnum) -{ - int fday = first_day (timeptr->tm_year + tm_year_base); - - timeptr->tm_yday = wnum * 7 + timeptr->tm_wday - fday; - if (timeptr->tm_yday < 0) { - timeptr->tm_wday = fday; - timeptr->tm_yday = 0; - } -} - -/* -* Set `timeptr' given `wnum' (week number [0, 53]) -*/ - -static void -set_week_number_mon (struct tm *timeptr, int wnum) -{ - int fday = (first_day (timeptr->tm_year + tm_year_base) + 6) % 7; - - timeptr->tm_yday = wnum * 7 + (timeptr->tm_wday + 6) % 7 - fday; - if (timeptr->tm_yday < 0) { - timeptr->tm_wday = (fday + 1) % 7; - timeptr->tm_yday = 0; - } -} - -/* -* Set `timeptr' given `wnum' (week number [0, 53]) -*/ - -static void -set_week_number_mon4 (struct tm *timeptr, int wnum) -{ - int fday = (first_day (timeptr->tm_year + tm_year_base) + 6) % 7; - int offset = 0; - - if (fday < 4) - offset += 7; - - timeptr->tm_yday = offset + (wnum - 1) * 7 + timeptr->tm_wday - fday; - if (timeptr->tm_yday < 0) { - timeptr->tm_wday = fday; - timeptr->tm_yday = 0; - } -} - -/* -* -*/ - -char * -strptime (const char *buf, const char *format, struct tm *timeptr) -{ - char c; - - for (; (c = *format) != '\0'; ++format) { - char *s; - int ret; - - if (isspace (c)) { - while (isspace (*buf)) - ++buf; - } else if (c == '%' && format[1] != '\0') { - c = *++format; - if (c == 'E' || c == 'O') - c = *++format; - switch (c) { - case 'A' : - ret = match_string (&buf, full_weekdays); - if (ret < 0) - return NULL; - timeptr->tm_wday = ret; - break; - case 'a' : - ret = match_string (&buf, abb_weekdays); - if (ret < 0) - return NULL; - timeptr->tm_wday = ret; - break; - case 'B' : - ret = match_string (&buf, full_month); - if (ret < 0) - return NULL; - timeptr->tm_mon = ret; - break; - case 'b' : - case 'h' : - ret = match_string (&buf, abb_month); - if (ret < 0) - return NULL; - timeptr->tm_mon = ret; - break; - case 'C' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_year = (ret * 100) - tm_year_base; - buf = s; - break; - case 'c' : - abort (); - case 'D' : /* %m/%d/%y */ - s = strptime (buf, "%m/%d/%y", timeptr); - if (s == NULL) - return NULL; - buf = s; - break; - case 'd' : - case 'e' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_mday = ret; - buf = s; - break; - case 'H' : - case 'k' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_hour = ret; - buf = s; - break; - case 'I' : - case 'l' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - if (ret == 12) - timeptr->tm_hour = 0; - else - timeptr->tm_hour = ret; - buf = s; - break; - case 'j' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_yday = ret - 1; - buf = s; - break; - case 'm' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_mon = ret - 1; - buf = s; - break; - case 'M' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_min = ret; - buf = s; - break; - case 'n' : - if (*buf == '\n') - ++buf; - else - return NULL; - break; - case 'p' : - ret = match_string (&buf, ampm); - if (ret < 0) - return NULL; - if (timeptr->tm_hour == 0) { - if (ret == 1) - timeptr->tm_hour = 12; - } else - timeptr->tm_hour += 12; - break; - case 'r' : /* %I:%M:%S %p */ - s = strptime (buf, "%I:%M:%S %p", timeptr); - if (s == NULL) - return NULL; - buf = s; - break; - case 'R' : /* %H:%M */ - s = strptime (buf, "%H:%M", timeptr); - if (s == NULL) - return NULL; - buf = s; - break; - case 'S' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_sec = ret; - buf = s; - break; - case 't' : - if (*buf == '\t') - ++buf; - else - return NULL; - break; - case 'T' : /* %H:%M:%S */ - case 'X' : - s = strptime (buf, "%H:%M:%S", timeptr); - if (s == NULL) - return NULL; - buf = s; - break; - case 'u' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_wday = ret - 1; - buf = s; - break; - case 'w' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_wday = ret; - buf = s; - break; - case 'U' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - set_week_number_sun (timeptr, ret); - buf = s; - break; - case 'V' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - set_week_number_mon4 (timeptr, ret); - buf = s; - break; - case 'W' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - set_week_number_mon (timeptr, ret); - buf = s; - break; - case 'x' : - s = strptime (buf, "%Y:%m:%d", timeptr); - if (s == NULL) - return NULL; - buf = s; - break; - case 'y' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - if (ret < 70) - timeptr->tm_year = 100 + ret; - else - timeptr->tm_year = ret; - buf = s; - break; - case 'Y' : - ret = strtol (buf, &s, 10); - if (s == buf) - return NULL; - timeptr->tm_year = ret - tm_year_base; - buf = s; - break; - case 'Z' : - abort (); - case '\0' : - --format; - /* FALLTHROUGH */ - case '%' : - if (*buf == '%') - ++buf; - else - return NULL; - break; - default : - if (*buf == '%' || *++buf == c) - ++buf; - else - return NULL; - break; - } - } else { - if (*buf == c) - ++buf; - else - return NULL; - } - } - return (char *)buf; -} diff --git a/source/lib/sysdep/os/win/wposix/wtime.h b/source/lib/sysdep/os/win/wposix/wtime.h deleted file mode 100644 index 6dda9c5432..0000000000 --- a/source/lib/sysdep/os/win/wposix/wtime.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2022 Wildfire Games. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * emulate POSIX high resolution timer on Windows. - */ - -#ifndef INCLUDED_WTIME -#define INCLUDED_WTIME - - -// -// -// - -typedef unsigned long useconds_t; -typedef long suseconds_t; - - -// -// -// - -unsigned sleep(unsigned sec); -int usleep(useconds_t us); - - -// -// -// - -extern int nanosleep(const struct timespec* rqtp, struct timespec* rmtp); - -char* strptime(const char* buf, const char* format, struct tm* timeptr); - -#endif // #ifndef INCLUDED_WTIME diff --git a/source/lib/sysdep/os/win/wposix/wtime_internal.h b/source/lib/sysdep/os/win/wposix/wtime_internal.h deleted file mode 100644 index 34ece87725..0000000000 --- a/source/lib/sysdep/os/win/wposix/wtime_internal.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2010 Wildfire Games. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef INCLUDED_WTIME_INTERNAL -#define INCLUDED_WTIME_INTERNAL - -// convert UTC FILETIME to seconds-since-1970 UTC. -// used by wfilesystem. -#ifndef _FILETIME_ // prevent ICE on VC7 -struct _FILETIME; -#endif -extern time_t wtime_utc_filetime_to_time_t(_FILETIME* ft); - -#endif // #ifndef INCLUDED_WTIME_INTERNAL diff --git a/source/lib/timer.cpp b/source/lib/timer.cpp index 35131c02ed..2bde3bd8ad 100644 --- a/source/lib/timer.cpp +++ b/source/lib/timer.cpp @@ -35,7 +35,6 @@ #include // std::stringstream #include "lib/module_init.h" -#include "lib/posix/posix_time.h" #include "lib/sysdep/cpu.h" #if OS_WIN