]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/time-util.h
build-sys: add missing Makefile symlink
[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
609e002e
LP
40#define MSEC_PER_SEC ((usec_t) 1000ULL)
41#define USEC_PER_SEC ((usec_t) 1000000ULL)
42#define USEC_PER_MSEC ((usec_t) 1000ULL)
43#define NSEC_PER_SEC ((usec_t) 1000000000ULL)
44#define NSEC_PER_MSEC ((usec_t) 1000000ULL)
45#define NSEC_PER_USEC ((usec_t) 1000ULL)
46
47#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
48#define NSEC_PER_MINUTE ((usec_t) (60ULL*NSEC_PER_SEC))
49#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
50#define NSEC_PER_HOUR ((usec_t) (60ULL*NSEC_PER_MINUTE))
51#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
52#define NSEC_PER_DAY ((usec_t) (24ULL*NSEC_PER_HOUR))
53#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
54#define NSEC_PER_WEEK ((usec_t) (7ULL*NSEC_PER_DAY))
55#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
56#define NSEC_PER_MONTH ((usec_t) (2629800ULL*NSEC_PER_SEC))
57#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
58#define NSEC_PER_YEAR ((usec_t) (31557600ULL*NSEC_PER_SEC))
9a98c7a1 59
f0d7b0fc 60#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
9185c8e6 61#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
9a98c7a1
LP
62#define FORMAT_TIMESPAN_MAX 64
63
842129f5
LP
64#define DUAL_TIMESTAMP_NULL ((struct dual_timestamp) { 0, 0 })
65
9a98c7a1
LP
66usec_t now(clockid_t clock);
67
68dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
69dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
cae0c5e0 70dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
9a98c7a1 71
966204e0
LP
72static inline bool dual_timestamp_is_set(dual_timestamp *ts) {
73 return ((ts->realtime > 0 && ts->realtime != (usec_t) -1) ||
74 (ts->monotonic > 0 && ts->monotonic != (usec_t) -1));
75}
9a98c7a1 76
44a6b1b6 77usec_t timespec_load(const struct timespec *ts) _pure_;
9a98c7a1
LP
78struct timespec *timespec_store(struct timespec *ts, usec_t u);
79
44a6b1b6 80usec_t timeval_load(const struct timeval *tv) _pure_;
9a98c7a1
LP
81struct timeval *timeval_store(struct timeval *tv, usec_t u);
82
83char *format_timestamp(char *buf, size_t l, usec_t t);
f02d8367 84char *format_timestamp_us(char *buf, size_t l, usec_t t);
bbb8486e 85char *format_timestamp_relative(char *buf, size_t l, usec_t t);
2fa4092c 86char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
9a98c7a1
LP
87
88void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
89void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
90
91int parse_timestamp(const char *t, usec_t *usec);
92
7f602784 93int parse_sec(const char *t, usec_t *usec);
9a98c7a1 94int parse_nsec(const char *t, nsec_t *nsec);
03cc26dd
LP
95
96bool ntp_synced(void);