LibC: Make time_t signed integer

Some port like python3 assumes this is the case
This commit is contained in:
Bananymous 2025-08-17 23:57:00 +03:00
parent 32f980e259
commit 9d6656451a
4 changed files with 11 additions and 7 deletions

View File

@ -30,19 +30,19 @@ namespace Kernel
timespec FATInode::atime() const timespec FATInode::atime() const
{ {
uint64_t epoch = fat_date_to_epoch(m_entry.last_access_date, {}); const time_t epoch = fat_date_to_epoch(m_entry.last_access_date, {});
return timespec { .tv_sec = epoch, .tv_nsec = 0 }; return timespec { .tv_sec = epoch, .tv_nsec = 0 };
} }
timespec FATInode::mtime() const timespec FATInode::mtime() const
{ {
uint64_t epoch = fat_date_to_epoch(m_entry.write_date, m_entry.write_time); const time_t epoch = fat_date_to_epoch(m_entry.write_date, m_entry.write_time);
return timespec { .tv_sec = epoch, .tv_nsec = 0 }; return timespec { .tv_sec = epoch, .tv_nsec = 0 };
} }
timespec FATInode::ctime() const timespec FATInode::ctime() const
{ {
uint64_t epoch = fat_date_to_epoch(m_entry.creation_date, m_entry.creation_time); const time_t epoch = fat_date_to_epoch(m_entry.creation_date, m_entry.creation_time);
return timespec { .tv_sec = epoch, .tv_nsec = 0 }; return timespec { .tv_sec = epoch, .tv_nsec = 0 };
} }

View File

@ -299,7 +299,7 @@ namespace Kernel
long ns_this_second = ticks_this_second * regs.counter_clk_period / FS_PER_NS; long ns_this_second = ticks_this_second * regs.counter_clk_period / FS_PER_NS;
return timespec { return timespec {
.tv_sec = seconds, .tv_sec = static_cast<time_t>(seconds),
.tv_nsec = ns_this_second .tv_nsec = ns_this_second
}; };
} }

View File

@ -146,7 +146,7 @@ __BEGIN_DECLS
#if !defined(__time_t_defined) && (defined(__need_all_types) || defined(__need_time_t)) #if !defined(__time_t_defined) && (defined(__need_all_types) || defined(__need_time_t))
#define __time_t_defined 1 #define __time_t_defined 1
typedef unsigned long long time_t; typedef long long time_t;
#endif #endif
#undef __need_time_t #undef __need_time_t

View File

@ -1,3 +1,4 @@
#include <BAN/Assert.h>
#include <BAN/Debug.h> #include <BAN/Debug.h>
#include <BAN/Math.h> #include <BAN/Math.h>
@ -167,15 +168,18 @@ time_t mktime(struct tm* tm)
struct tm* gmtime_r(const time_t* timer, struct tm* __restrict result) struct tm* gmtime_r(const time_t* timer, struct tm* __restrict result)
{ {
// FIXME: allow negative times :)
ASSERT(*timer >= 0);
constexpr uint64_t month_days[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; constexpr uint64_t month_days[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
time_t time = *timer; unsigned long long time = *timer;
result->tm_sec = time % 60; time /= 60; result->tm_sec = time % 60; time /= 60;
result->tm_min = time % 60; time /= 60; result->tm_min = time % 60; time /= 60;
result->tm_hour = time % 24; time /= 24; result->tm_hour = time % 24; time /= 24;
time_t total_days = time; unsigned long long total_days = time;
result->tm_wday = (total_days + 4) % 7; result->tm_wday = (total_days + 4) % 7;
result->tm_year = 1970; result->tm_year = 1970;
while (total_days >= 365U + is_leap_year(result->tm_year)) while (total_days >= 365U + is_leap_year(result->tm_year))