Initial public busybox upstream commit
[busybox4maemo] / libbb / time.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Utility routines.
4  *
5  * Copyright (C) 2007 Denys Vlasenko
6  *
7  * Licensed under GPL version 2, see file LICENSE in this tarball for details.
8  */
9
10 #include "libbb.h"
11
12 #if ENABLE_MONOTONIC_SYSCALL
13 #include <sys/syscall.h>
14
15 /* libc has incredibly messy way of doing this,
16  * typically requiring -lrt. We just skip all this mess */
17 unsigned long long monotonic_us(void)
18 {
19         struct timespec ts;
20         if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts))
21                 bb_error_msg_and_die("clock_gettime(MONOTONIC) failed");
22         return ts.tv_sec * 1000000ULL + ts.tv_nsec/1000;
23 }
24 unsigned monotonic_sec(void)
25 {
26         struct timespec ts;
27         if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts))
28                 bb_error_msg_and_die("clock_gettime(MONOTONIC) failed");
29         return ts.tv_sec;
30 }
31 #else
32 unsigned long long monotonic_us(void)
33 {
34         struct timeval tv;
35         gettimeofday(&tv, NULL);
36         return tv.tv_sec * 1000000ULL + tv.tv_usec;
37 }
38
39 unsigned monotonic_sec(void)
40 {
41         return time(NULL);
42 }
43 #endif