annotate util-src/time.c @ 14229:ce31fdde0ad1 default tip

net.unbound: Simplify conditional
author Kim Alvefur <zash@zash.se>
date Sat, 13 Jun 2026 11:35:18 +0200
parents 973609bad40a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9164
35807f02bdc7 util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents: 9163
diff changeset
1 #ifndef _POSIX_C_SOURCE
9680
a374905e99ff util.time: Bump POSIX_C_SOURCE to ensure visibility of CLOCK_MONOTONIC on FreeBSD (fixes #1253)
Matthew Wild <mwild1@gmail.com>
parents: 9164
diff changeset
2 #define _POSIX_C_SOURCE 200809L
9164
35807f02bdc7 util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents: 9163
diff changeset
3 #endif
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 #include <time.h>
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 #include <lua.h>
14080
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
7 #include <lauxlib.h>
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9680
diff changeset
9 static lua_Number tv2number(struct timespec *tv) {
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 return tv->tv_sec + tv->tv_nsec * 1e-9;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 }
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9680
diff changeset
13 static int lc_time_realtime(lua_State *L) {
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 struct timespec t;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 clock_gettime(CLOCK_REALTIME, &t);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 lua_pushnumber(L, tv2number(&t));
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 return 1;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 }
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9680
diff changeset
20 static int lc_time_monotonic(lua_State *L) {
9163
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
21 struct timespec t;
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
22 clock_gettime(CLOCK_MONOTONIC, &t);
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
23 lua_pushnumber(L, tv2number(&t));
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
24 return 1;
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
25 }
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
26
14080
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
27 /* This function has been imported from luasocket */
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
28 static int lc_sleep(lua_State *L) {
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
29 double n = luaL_checknumber(L, 1);
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
30 struct timespec t, r;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
31 if (n < 0.0) n = 0.0;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
32 if (n > INT_MAX) n = INT_MAX;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
33 t.tv_sec = (int) n;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
34 n -= t.tv_sec;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
35 t.tv_nsec = (int) (n * 1000000000);
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
36 if (t.tv_nsec >= 1000000000) t.tv_nsec = 999999999;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
37 while (nanosleep(&t, &r) != 0) {
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
38 t.tv_sec = r.tv_sec;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
39 t.tv_nsec = r.tv_nsec;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
40 }
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
41 return 0;
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
42 }
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
43
12976
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
44 int luaopen_prosody_util_time(lua_State *L) {
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 lua_createtable(L, 0, 2);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 {
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 lua_pushcfunction(L, lc_time_realtime);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 lua_setfield(L, -2, "now");
9163
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
49 lua_pushcfunction(L, lc_time_monotonic);
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9162
diff changeset
50 lua_setfield(L, -2, "monotonic");
14080
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
51 lua_pushcfunction(L, lc_sleep);
973609bad40a util.time: Import sleep from luasocket
Link Mauve <linkmauve@linkmauve.fr>
parents: 12976
diff changeset
52 lua_setfield(L, -2, "sleep");
9162
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 }
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 return 1;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 }
12976
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
56 int luaopen_util_time(lua_State *L) {
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
57 return luaopen_prosody_util_time(L);
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
58 }