Mercurial > prosody-hg
diff util-src/time.c @ 14080:973609bad40a
util.time: Import sleep from luasocket
We might not want to use the full LuaSocket for such a tiny function which will
never change.
This drops win32 support but that should be fine.
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 30 Jan 2026 14:08:53 +0100 |
| parents | a187600ec7d6 |
| children |
line wrap: on
line diff
--- a/util-src/time.c Fri Jan 30 14:44:04 2026 +0100 +++ b/util-src/time.c Fri Jan 30 14:08:53 2026 +0100 @@ -4,6 +4,7 @@ #include <time.h> #include <lua.h> +#include <lauxlib.h> static lua_Number tv2number(struct timespec *tv) { return tv->tv_sec + tv->tv_nsec * 1e-9; @@ -23,6 +24,23 @@ return 1; } +/* This function has been imported from luasocket */ +static int lc_sleep(lua_State *L) { + double n = luaL_checknumber(L, 1); + struct timespec t, r; + if (n < 0.0) n = 0.0; + if (n > INT_MAX) n = INT_MAX; + t.tv_sec = (int) n; + n -= t.tv_sec; + t.tv_nsec = (int) (n * 1000000000); + if (t.tv_nsec >= 1000000000) t.tv_nsec = 999999999; + while (nanosleep(&t, &r) != 0) { + t.tv_sec = r.tv_sec; + t.tv_nsec = r.tv_nsec; + } + return 0; +} + int luaopen_prosody_util_time(lua_State *L) { lua_createtable(L, 0, 2); { @@ -30,6 +48,8 @@ lua_setfield(L, -2, "now"); lua_pushcfunction(L, lc_time_monotonic); lua_setfield(L, -2, "monotonic"); + lua_pushcfunction(L, lc_sleep); + lua_setfield(L, -2, "sleep"); } return 1; }
