]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/time-util.h
update TODO
[thirdparty/systemd.git] / src / shared / time-util.h
CommitLineData
9a98c7a1
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24#include <stdio.h>
cb0dac05 25#include <inttypes.h>
9a98c7a1
LP
26
27typedef uint64_t usec_t;
28typedef uint64_t nsec_t;
29
ccd06097
ZJS
30#define NSEC_FMT "%" PRIu64
31#define USEC_FMT "%" PRIu64
32
9a98c7a1
LP
33#include "macro.h"
34
35typedef struct dual_timestamp {
36 usec_t realtime;
37 usec_t monotonic;
38} dual_timestamp;
39
3a43da28
KS
40#define USEC_INFINITY ((usec_t) -1)
41#define NSEC_INFINITY ((nsec_t) -1)
42
43#define MSEC_PER_SEC 1000ULL
609e002e
LP
44#define USEC_PER_SEC ((usec_t) 1000000ULL)
45#define USEC_PER_MSEC ((usec_t) 1000ULL)
3a43da28
KS
46#define NSEC_PER_SEC ((nsec_t) 1000000000ULL)
47#define NSEC_PER_MSEC ((nsec_t) 1000000ULL)
48#define NSEC_PER_USEC ((nsec_t) 1000ULL)
609e002e
LP
49
50#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
3a43da28 51#define NSEC_PER_MINUTE ((nsec_t) (60ULL*NSEC_PER_SEC))
609e002e 52#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
3a43da28 53#define NSEC_PER_HOUR ((nsec_t) (60ULL*NSEC_PER_MINUTE))
609e002e 54#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
3a43da28 55#define NSEC_PER_DAY ((nsec_t) (24ULL*NSEC_PER_HOUR))
609e002e 56#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
3a43da28 57#define NSEC_PER_WEEK ((nsec_t) (7ULL*NSEC_PER_DAY))
609e002e 58#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
3a43da28 59#define NSEC_PER_MONTH ((nsec_t) (2629800ULL*NSEC_PER_SEC))
609e002e 60#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
3a43da28 61#define NSEC_PER_YEAR ((nsec_t) (31557600ULL*NSEC_PER_SEC))
9a98c7a1 62
f0d7b0fc 63#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
c3f84106 64#define FORMAT_TIMESTAMP_WIDTH 28 /* when outputting, assume this width */
9185c8e6 65#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
9a98c7a1
LP
66#define FORMAT_TIMESPAN_MAX 64
67
842129f5
LP
68#define DUAL_TIMESTAMP_NULL ((struct dual_timestamp) { 0, 0 })
69
9a98c7a1
LP
70usec_t now(clockid_t clock);
71
72dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
73dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
cae0c5e0 74dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
9a98c7a1 75
966204e0 76static inline bool dual_timestamp_is_set(dual_timestamp *ts) {
3a43da28
KS
77 return ((ts->realtime > 0 && ts->realtime != USEC_INFINITY) ||
78 (ts->monotonic > 0 && ts->monotonic != USEC_INFINITY));
966204e0 79}
9a98c7a1 80
44a6b1b6 81usec_t timespec_load(const struct timespec *ts) _pure_;
9a98c7a1
LP
82struct timespec *timespec_store(struct timespec *ts, usec_t u);
83
44a6b1b6 84usec_t timeval_load(const struct timeval *tv) _pure_;
9a98c7a1
LP
85struct timeval *timeval_store(struct timeval *tv, usec_t u);
86
87char *format_timestamp(char *buf, size_t l, usec_t t);
5ab99e07
LP
88char *format_timestamp_utc(char *buf, size_t l, usec_t t);
89char *format_timestamp_us(char *buf, size_t l, usec_t t);
90char *format_timestamp_us_utc(char *buf, size_t l, usec_t t);
bbb8486e 91char *format_timestamp_relative(char *buf, size_t l, usec_t t);
2fa4092c 92char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
9a98c7a1
LP
93
94void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
95void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
96
97int parse_timestamp(const char *t, usec_t *usec);
98
7f602784 99int parse_sec(const char *t, usec_t *usec);
9a98c7a1 100int parse_nsec(const char *t, nsec_t *nsec);
03cc26dd
LP
101
102bool ntp_synced(void);
75683450
LP
103
104int get_timezones(char ***l);
105bool timezone_is_valid(const char *name);
77ff2de9
TG
106
107clockid_t clock_boottime_or_monotonic(void);