xref: /third_party/eudev/src/shared/time-util.h (revision 99ca880a)
199ca880aSopenharmony_ci/***
299ca880aSopenharmony_ci  This file is part of eudev, forked from systemd.
399ca880aSopenharmony_ci
499ca880aSopenharmony_ci  Copyright 2010 Lennart Poettering
599ca880aSopenharmony_ci
699ca880aSopenharmony_ci  systemd is free software; you can redistribute it and/or modify it
799ca880aSopenharmony_ci  under the terms of the GNU Lesser General Public License as published by
899ca880aSopenharmony_ci  the Free Software Foundation; either version 2.1 of the License, or
999ca880aSopenharmony_ci  (at your option) any later version.
1099ca880aSopenharmony_ci
1199ca880aSopenharmony_ci  systemd is distributed in the hope that it will be useful, but
1299ca880aSopenharmony_ci  WITHOUT ANY WARRANTY; without even the implied warranty of
1399ca880aSopenharmony_ci  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1499ca880aSopenharmony_ci  Lesser General Public License for more details.
1599ca880aSopenharmony_ci
1699ca880aSopenharmony_ci  You should have received a copy of the GNU Lesser General Public License
1799ca880aSopenharmony_ci  along with systemd; If not, see <http://www.gnu.org/licenses/>.
1899ca880aSopenharmony_ci***/
1999ca880aSopenharmony_ci
2099ca880aSopenharmony_ci#pragma once
2199ca880aSopenharmony_ci
2299ca880aSopenharmony_ci#include <inttypes.h>
2399ca880aSopenharmony_ci
2499ca880aSopenharmony_citypedef uint64_t usec_t;
2599ca880aSopenharmony_citypedef uint64_t nsec_t;
2699ca880aSopenharmony_ci
2799ca880aSopenharmony_ci#define USEC_FMT "%" PRIu64
2899ca880aSopenharmony_ci
2999ca880aSopenharmony_ci#include "macro.h"
3099ca880aSopenharmony_ci
3199ca880aSopenharmony_citypedef struct dual_timestamp {
3299ca880aSopenharmony_ci        usec_t realtime;
3399ca880aSopenharmony_ci        usec_t monotonic;
3499ca880aSopenharmony_ci} dual_timestamp;
3599ca880aSopenharmony_ci
3699ca880aSopenharmony_ci#define USEC_INFINITY ((usec_t) -1)
3799ca880aSopenharmony_ci#define NSEC_INFINITY ((nsec_t) -1)
3899ca880aSopenharmony_ci
3999ca880aSopenharmony_ci#define MSEC_PER_SEC  1000ULL
4099ca880aSopenharmony_ci#define USEC_PER_SEC  ((usec_t) 1000000ULL)
4199ca880aSopenharmony_ci#define USEC_PER_MSEC ((usec_t) 1000ULL)
4299ca880aSopenharmony_ci#define NSEC_PER_SEC  ((nsec_t) 1000000000ULL)
4399ca880aSopenharmony_ci#define NSEC_PER_MSEC ((nsec_t) 1000000ULL)
4499ca880aSopenharmony_ci#define NSEC_PER_USEC ((nsec_t) 1000ULL)
4599ca880aSopenharmony_ci
4699ca880aSopenharmony_ci#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
4799ca880aSopenharmony_ci#define NSEC_PER_MINUTE ((nsec_t) (60ULL*NSEC_PER_SEC))
4899ca880aSopenharmony_ci#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
4999ca880aSopenharmony_ci#define NSEC_PER_HOUR ((nsec_t) (60ULL*NSEC_PER_MINUTE))
5099ca880aSopenharmony_ci#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
5199ca880aSopenharmony_ci#define NSEC_PER_DAY ((nsec_t) (24ULL*NSEC_PER_HOUR))
5299ca880aSopenharmony_ci#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
5399ca880aSopenharmony_ci#define NSEC_PER_WEEK ((nsec_t) (7ULL*NSEC_PER_DAY))
5499ca880aSopenharmony_ci#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
5599ca880aSopenharmony_ci#define NSEC_PER_MONTH ((nsec_t) (2629800ULL*NSEC_PER_SEC))
5699ca880aSopenharmony_ci#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
5799ca880aSopenharmony_ci#define NSEC_PER_YEAR ((nsec_t) (31557600ULL*NSEC_PER_SEC))
5899ca880aSopenharmony_ci
5999ca880aSopenharmony_ci#define FORMAT_TIMESPAN_MAX 64
6099ca880aSopenharmony_ci
6199ca880aSopenharmony_ciusec_t now(clockid_t clock);
6299ca880aSopenharmony_ci
6399ca880aSopenharmony_ciusec_t timespec_load(const struct timespec *ts) _pure_;
6499ca880aSopenharmony_cistruct timespec *timespec_store(struct timespec *ts, usec_t u);
6599ca880aSopenharmony_ci
6699ca880aSopenharmony_cistruct timeval *timeval_store(struct timeval *tv, usec_t u);
6799ca880aSopenharmony_cichar *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
68