Skip to content

Commit 16e4d0f

Browse files
committed
Switch to 64bit timestamps in libc
1 parent 7617616 commit 16e4d0f

File tree

4 files changed

+17
-27
lines changed

4 files changed

+17
-27
lines changed

src/library.js

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -397,21 +397,6 @@ LibraryManager.library = {
397397
return ((Date.now() - _clock.start) * ({{{ cDefine('CLOCKS_PER_SEC') }}} / 1000))|0;
398398
},
399399

400-
time__sig: 'ii',
401-
time: function(ptr) {
402-
{{{ from64('ptr') }}};
403-
var ret = (Date.now()/1000)|0;
404-
if (ptr) {
405-
{{{ makeSetValue('ptr', 0, 'ret', 'i32') }}};
406-
}
407-
return ret;
408-
},
409-
410-
difftime__sig: 'dii',
411-
difftime: function(time1, time0) {
412-
return time1 - time0;
413-
},
414-
415400
_mktime_js__sig: 'ii',
416401
_mktime_js: function(tmPtr) {
417402
var date = new Date({{{ makeGetValue('tmPtr', C_STRUCTS.tm.tm_year, 'i32') }}} + 1900,
@@ -1275,7 +1260,8 @@ LibraryManager.library = {
12751260
setErrNo({{{ cDefine('EINVAL') }}});
12761261
return -1;
12771262
}
1278-
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_sec, '(now/1000)|0', 'i32') }}}; // seconds
1263+
// struct timespec { time_t tv_sec; long tv_nsec; };
1264+
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_sec, '(now/1000)|0', 'i64') }}}; // seconds
12791265
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_nsec, '((now % 1000)*1000*1000)|0', 'i32') }}}; // nanoseconds
12801266
return 0;
12811267
},
@@ -1293,16 +1279,18 @@ LibraryManager.library = {
12931279
setErrNo({{{ cDefine('EINVAL') }}});
12941280
return -1;
12951281
}
1296-
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_sec, '(nsec/1000000000)|0', 'i32') }}};
1282+
// struct timespec { time_t tv_sec; long tv_nsec; };
1283+
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_sec, '(nsec/1000000000)|0', 'i64') }}};
12971284
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_nsec, 'nsec', 'i32') }}} // resolution is nanoseconds
12981285
return 0;
12991286
},
13001287
gettimeofday__sig: 'iii',
13011288
// http://pubs.opengroup.org/onlinepubs/000095399/basedefs/sys/time.h.html
13021289
gettimeofday: function(ptr) {
13031290
var now = Date.now();
1304-
{{{ makeSetValue('ptr', C_STRUCTS.timeval.tv_sec, '(now/1000)|0', 'i32') }}}; // seconds
1305-
{{{ makeSetValue('ptr', C_STRUCTS.timeval.tv_usec, '((now % 1000)*1000)|0', 'i32') }}}; // microseconds
1291+
// struct timeval { time_t tv_sec; suseconds_t tv_usec; };
1292+
{{{ makeSetValue('ptr', C_STRUCTS.timeval.tv_sec, '(now/1000)|0', 'i64') }}}; // seconds
1293+
{{{ makeSetValue('ptr', C_STRUCTS.timeval.tv_usec, '((now % 1000)*1000)|0', 'i64') }}}; // microseconds
13061294
return 0;
13071295
},
13081296

@@ -1312,7 +1300,8 @@ LibraryManager.library = {
13121300

13131301
ftime: function(p) {
13141302
var millis = Date.now();
1315-
{{{ makeSetValue('p', C_STRUCTS.timeb.time, '(millis/1000)|0', 'i32') }}};
1303+
// struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };
1304+
{{{ makeSetValue('p', C_STRUCTS.timeb.time, '(millis/1000)|0', 'i64') }}};
13161305
{{{ makeSetValue('p', C_STRUCTS.timeb.millitm, 'millis % 1000', 'i16') }}};
13171306
{{{ makeSetValue('p', C_STRUCTS.timeb.timezone, '0', 'i16') }}}; // Obsolete field
13181307
{{{ makeSetValue('p', C_STRUCTS.timeb.dstflag, '0', 'i16') }}}; // Obsolete field

system/lib/libc/musl/arch/emscripten/bits/alltypes.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ typedef long double double_t;
7878
#endif
7979

8080
#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
81-
typedef long time_t;
81+
typedef long long time_t;
8282
#define __DEFINED_time_t
8383
#endif
8484

8585
#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
86-
typedef long suseconds_t;
86+
typedef long long suseconds_t;
8787
#define __DEFINED_suseconds_t
8888
#endif
8989

system/lib/libc/musl/arch/emscripten/bits/alltypes.h.in

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#define _REDIR_TIME64 1
12
#define _Addr __PTRDIFF_TYPE__
23
#define _Int64 __INT64_TYPE__
34
#define _Reg __PTRDIFF_TYPE__
@@ -14,8 +15,8 @@ TYPEDEF float float_t;
1415
TYPEDEF double double_t;
1516

1617
TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
17-
TYPEDEF long time_t;
18-
TYPEDEF long suseconds_t;
18+
TYPEDEF long long time_t;
19+
TYPEDEF long long suseconds_t;
1920

2021
TYPEDEF struct { union { int __i[10]; unsigned __s[10]; } __u; } pthread_attr_t;
2122
TYPEDEF struct { union { int __i[7]; void *__p[7]; } __u; } pthread_mutex_t;

tools/system_libs.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,8 @@ def get_files(self):
908908
'ctime.c',
909909
'gmtime.c',
910910
'localtime.c',
911+
'difftime.c',
912+
'time.c',
911913
'nanosleep.c',
912914
'clock_nanosleep.c',
913915
'ctime_r.c',
@@ -1600,13 +1602,11 @@ def get_files(self):
16001602
'__year_to_secs.c',
16011603
'clock.c',
16021604
'clock_gettime.c',
1603-
'difftime.c',
16041605
'gettimeofday.c',
16051606
'localtime_r.c',
16061607
'gmtime_r.c',
16071608
'mktime.c',
1608-
'timegm.c',
1609-
'time.c'])
1609+
'timegm.c'])
16101610
# It is more efficient to use JS for __assert_fail, as it avoids always
16111611
# including fprintf etc.
16121612
files += files_in_path(

0 commit comments

Comments
 (0)