util-src/time.c
author Kim Alvefur <zash@zash.se>
Sun, 24 Mar 2024 21:32:00 +0100
changeset 13468 2dbc169aae6a
parent 12980 a187600ec7d6
permissions -rw-r--r--
util.startup: Abort before initialization of logging when started as root Prevents creation of log files owned by the root user which could be inaccessible once started correctly.
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
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
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
10484
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9684
diff changeset
     8
static lua_Number tv2number(struct timespec *tv) {
9165
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
10484
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9684
diff changeset
    12
static int lc_time_realtime(lua_State *L) {
9165
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
10484
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9684
diff changeset
    19
static int lc_time_monotonic(lua_State *L) {
9166
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
12980
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10484
diff changeset
    26
int luaopen_prosody_util_time(lua_State *L) {
9165
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
}
12980
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10484
diff changeset
    36
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: 10484
diff changeset
    37
	return luaopen_prosody_util_time(L);
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 10484
diff changeset
    38
}