Skip to content
Snippets Groups Projects
Commit 795a4211 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

When a double is cast to an int, but the double has a larger value

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.
parent 05814e1e
Branches
Tags
No related merge requests found
......@@ -696,7 +696,14 @@ char* os_cmdshell(void)
#ifdef __unix__
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment