author | Matthew Wild <mwild1@gmail.com> |
Tue, 04 Dec 2018 12:11:15 +0000 | |
changeset 9684 | a374905e99ff |
parent 9167 | 35807f02bdc7 |
child 10484 | 94cacf9fd0ae |
permissions | -rw-r--r-- |
9167
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9166
diff
changeset
|
1 |
#ifndef _POSIX_C_SOURCE |
9684
a374905e99ff
util.time: Bump POSIX_C_SOURCE to ensure visibility of CLOCK_MONOTONIC on FreeBSD (fixes #1253)
Matthew Wild <mwild1@gmail.com>
parents:
9167
diff
changeset
|
2 |
#define _POSIX_C_SOURCE 200809L |
9167
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9166
diff
changeset
|
3 |
#endif |
9165 | 4 |
|
5 |
#include <time.h> |
|
6 |
#include <lua.h> |
|
7 |
||
8 |
lua_Number tv2number(struct timespec *tv) { |
|
9 |
return tv->tv_sec + tv->tv_nsec * 1e-9; |
|
10 |
} |
|
11 |
||
12 |
int lc_time_realtime(lua_State *L) { |
|
13 |
struct timespec t; |
|
14 |
clock_gettime(CLOCK_REALTIME, &t); |
|
15 |
lua_pushnumber(L, tv2number(&t)); |
|
16 |
return 1; |
|
17 |
} |
|
18 |
||
9166 | 19 |
int lc_time_monotonic(lua_State *L) { |
20 |
struct timespec t; |
|
21 |
clock_gettime(CLOCK_MONOTONIC, &t); |
|
22 |
lua_pushnumber(L, tv2number(&t)); |
|
23 |
return 1; |
|
24 |
} |
|
25 |
||
9165 | 26 |
int luaopen_util_time(lua_State *L) { |
27 |
lua_createtable(L, 0, 2); |
|
28 |
{ |
|
29 |
lua_pushcfunction(L, lc_time_realtime); |
|
30 |
lua_setfield(L, -2, "now"); |
|
9166 | 31 |
lua_pushcfunction(L, lc_time_monotonic); |
32 |
lua_setfield(L, -2, "monotonic"); |
|
9165 | 33 |
} |
34 |
return 1; |
|
35 |
} |