diff options
| -rw-r--r-- | src/time/clock_gettime.c | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/src/time/clock_gettime.c b/src/time/clock_gettime.c index 8fd1b8f5..46083759 100644 --- a/src/time/clock_gettime.c +++ b/src/time/clock_gettime.c @@ -40,6 +40,24 @@ int __clock_gettime(clockid_t clk, struct timespec *ts)  	}  #endif +#ifdef SYS_clock_gettime64 +	if (sizeof(time_t) > 4) +		r = __syscall(SYS_clock_gettime64, clk, ts); +	if (SYS_clock_gettime == SYS_clock_gettime64 || r!=-ENOSYS) +		return __syscall_ret(r); +	long ts32[2]; +	r = __syscall(SYS_clock_gettime, clk, ts32); +	if (r==-ENOSYS && clk==CLOCK_REALTIME) { +		r = __syscall(SYS_gettimeofday, ts32, 0); +		ts32[1] *= 1000; +	} +	if (!r) { +		ts->tv_sec = ts32[0]; +		ts->tv_nsec = ts32[1]; +		return r; +	} +	return __syscall_ret(r); +#else  	r = __syscall(SYS_clock_gettime, clk, ts);  	if (r == -ENOSYS) {  		if (clk == CLOCK_REALTIME) { @@ -50,6 +68,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts)  		r = -EINVAL;  	}  	return __syscall_ret(r); +#endif  }  weak_alias(__clock_gettime, clock_gettime);  | 
