@@ -5783,32 +5783,40 @@ LibraryManager.library = {
5783
5783
}
5784
5784
return _usleep ( ( seconds * 1e6 ) + ( nanoseconds / 1000 ) ) ;
5785
5785
} ,
5786
- clock_gettime__deps: [ 'emscripten_get_now' ] ,
5786
+ clock_gettime__deps: [ 'emscripten_get_now' , 'emscripten_get_now_monotonic' , '$ERRNO_CODES' , '__setErrNo' ] ,
5787
5787
clock_gettime : function ( clk_id , tp ) {
5788
5788
// int clock_gettime(clockid_t clk_id, struct timespec *tp);
5789
5789
var now ;
5790
5790
if ( clk_id === { { { cDefine ( 'CLOCK_REALTIME' ) } } } ) {
5791
5791
now = Date . now ( ) ;
5792
- } else {
5792
+ } else if ( clk_id === { { { cDefine ( 'CLOCK_MONOTONIC' ) } } } && _emscripten_get_now_monotonic ( ) ) {
5793
5793
now = _emscripten_get_now ( ) ;
5794
+ } else {
5795
+ ___setErrNo ( ERRNO_CODES . EINVAL ) ;
5796
+ return - 1 ;
5794
5797
}
5795
5798
{ { { makeSetValue ( 'tp' , C_STRUCTS . timespec . tv_sec , '(now/1000)|0' , 'i32' ) } } } ; // seconds
5796
5799
{ { { makeSetValue ( 'tp' , C_STRUCTS . timespec . tv_nsec , '((now % 1000)*1000*1000)|0' , 'i32' ) } } } ; // nanoseconds
5797
5800
return 0 ;
5798
5801
} ,
5802
+ clock_settime__deps : [ '$ERRNO_CODES' , '__setErrNo' ] ,
5799
5803
clock_settime : function ( clk_id , tp ) {
5800
5804
// int clock_settime(clockid_t clk_id, const struct timespec *tp);
5801
5805
// Nothing.
5802
- return 0 ;
5806
+ ___setErrNo ( ERRNO_CODES . EPERM ) ;
5807
+ return - 1 ;
5803
5808
} ,
5804
- clock_getres__deps : [ 'emscripten_get_now_res' ] ,
5809
+ clock_getres__deps : [ 'emscripten_get_now_res' , 'emscripten_get_now_monotonic' , '$ERRNO_CODES' , '__setErrNo' ] ,
5805
5810
clock_getres : function ( clk_id , res ) {
5806
5811
// int clock_getres(clockid_t clk_id, struct timespec *res);
5807
5812
var nsec ;
5808
5813
if ( clk_id === { { { cDefine ( 'CLOCK_REALTIME' ) } } } ) {
5809
5814
nsec = 1000 * 1000 ;
5815
+ } else if ( clk_id === { { { cDefine ( 'CLOCK_MONOTONIC' ) } } } && _emscripten_get_now_monotonic ( ) ) {
5816
+ now = _emscripten_get_now_res ( ) ;
5810
5817
} else {
5811
- nsec = _emscripten_get_now_res ( ) ;
5818
+ ___setErrNo ( ERRNO_CODES . EINVAL ) ;
5819
+ return - 1 ;
5812
5820
}
5813
5821
{ { { makeSetValue ( 'res' , C_STRUCTS . timespec . tv_sec , '1' , 'i32' ) } } } ;
5814
5822
{ { { makeSetValue ( 'res' , C_STRUCTS . timespec . tv_nsec , 'nsec' , 'i32' ) } } } // resolution is milliseconds
@@ -8494,6 +8502,13 @@ LibraryManager.library = {
8494
8502
}
8495
8503
} ,
8496
8504
8505
+ emscripten_get_now_monotonic__deps : [ 'emscripten_get_now' ] ,
8506
+ emscripten_get_now_monotonic : function ( ) {
8507
+ // return whether emscripten_get_now is guaranteed monotonic; the Date.now
8508
+ // implementation is not :(
8509
+ return ( _emscripten_get_now ( ) == Date . now ) | 0 ;
8510
+ } ,
8511
+
8497
8512
// Returns [parentFuncArguments, functionName, paramListName]
8498
8513
_emscripten_traverse_stack : function ( args ) {
8499
8514
if ( ! args || ! args . callee || ! args . callee . name ) {
0 commit comments