Commits (1)
  • Deucе's avatar
    When a double is cast to an int, but the double has a larger value · f587a43e
    Deucе authored
    than the int supports, it's set to 0x80000000 to indicate overflow.
    
    msclock() is *always* overflowing, and clock_t is only 32-bits on
    some platforms (specifically FreeBSD).  To "avoid" problems, just
    keep subtracting UIN32_MAX from the value until it's less than INT_MAX
    then cast.
    
    This function is, of course, terrible and shouldn't actually be used,
    but it should at least sorta kinda workish.
    f587a43e
...@@ -696,7 +696,14 @@ char* os_cmdshell(void) ...@@ -696,7 +696,14 @@ char* os_cmdshell(void)
#ifdef __unix__ #ifdef __unix__
clock_t msclock(void) clock_t msclock(void)
{ {
return (clock_t)(xp_timer() * 1000); long double t = roundl(xp_timer() * 1000);
if (sizeof(clock_t) < 8) {
while (t > INT32_MAX)
t -= UINT32_MAX;
}
return (clock_t)t;
} }
#endif #endif
......