util-src/time.c
author Kim Alvefur <zash@zash.se>
Thu, 04 Nov 2021 01:00:06 +0100
branch0.11
changeset 12093 76b4e3f12b53
parent 9167 35807f02bdc7
child 9684 a374905e99ff
permissions -rw-r--r--
mod_pep: Wipe pubsub service on user deletion Data is already wiped from storage, but this ensures everything is properly unsubscribed, possibly with notifications etc. Clears recipient cache as well, since it is no longer relevant.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9167
35807f02bdc7 util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents: 9166
diff changeset
     1
#ifndef _POSIX_C_SOURCE
9165
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
#define _POSIX_C_SOURCE 199309L
9167
35807f02bdc7 util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents: 9166
diff changeset
     3
#endif
9165
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>
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
lua_Number tv2number(struct timespec *tv) {
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	return tv->tv_sec + tv->tv_nsec * 1e-9;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
}
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
int lc_time_realtime(lua_State *L) {
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
	struct timespec t;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	clock_gettime(CLOCK_REALTIME, &t);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
	lua_pushnumber(L, tv2number(&t));
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
	return 1;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
}
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
9166
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    19
int lc_time_monotonic(lua_State *L) {
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    20
	struct timespec t;
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    21
	clock_gettime(CLOCK_MONOTONIC, &t);
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    22
	lua_pushnumber(L, tv2number(&t));
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    23
	return 1;
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    24
}
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    25
9165
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
int luaopen_util_time(lua_State *L) {
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	lua_createtable(L, 0, 2);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	{
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		lua_pushcfunction(L, lc_time_realtime);
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
		lua_setfield(L, -2, "now");
9166
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    31
		lua_pushcfunction(L, lc_time_monotonic);
6b1f46730217 util.time: Add monotonic time
Kim Alvefur <zash@zash.se>
parents: 9165
diff changeset
    32
		lua_setfield(L, -2, "monotonic");
9165
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	}
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
	return 1;
8ad1fe9d26d4 util.time: Convert to C
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
}