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