Contents of /tags/mkinitrd-6_1_5/busybox/libbb/time.c
Parent Directory | Revision Log
Revision 899 -
(show annotations)
(download)
Wed Aug 5 17:52:52 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 1439 byte(s)
Wed Aug 5 17:52:52 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 1439 byte(s)
tagged 'mkinitrd-6_1_5'
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 | |
14 | #include <sys/syscall.h> |
15 | /* Old glibc (< 2.3.4) does not provide this constant. We use syscall |
16 | * directly so this definition is safe. */ |
17 | #ifndef CLOCK_MONOTONIC |
18 | #define CLOCK_MONOTONIC 1 |
19 | #endif |
20 | |
21 | /* libc has incredibly messy way of doing this, |
22 | * typically requiring -lrt. We just skip all this mess */ |
23 | static void get_mono(struct timespec *ts) |
24 | { |
25 | if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) |
26 | bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); |
27 | } |
28 | unsigned long long FAST_FUNC monotonic_ns(void) |
29 | { |
30 | struct timespec ts; |
31 | get_mono(&ts); |
32 | return ts.tv_sec * 1000000000ULL + ts.tv_nsec; |
33 | } |
34 | unsigned long long FAST_FUNC monotonic_us(void) |
35 | { |
36 | struct timespec ts; |
37 | get_mono(&ts); |
38 | return ts.tv_sec * 1000000ULL + ts.tv_nsec/1000; |
39 | } |
40 | unsigned FAST_FUNC monotonic_sec(void) |
41 | { |
42 | struct timespec ts; |
43 | get_mono(&ts); |
44 | return ts.tv_sec; |
45 | } |
46 | |
47 | #else |
48 | |
49 | unsigned long long FAST_FUNC monotonic_ns(void) |
50 | { |
51 | struct timeval tv; |
52 | gettimeofday(&tv, NULL); |
53 | return tv.tv_sec * 1000000000ULL + tv.tv_usec * 1000; |
54 | } |
55 | unsigned long long FAST_FUNC monotonic_us(void) |
56 | { |
57 | struct timeval tv; |
58 | gettimeofday(&tv, NULL); |
59 | return tv.tv_sec * 1000000ULL + tv.tv_usec; |
60 | } |
61 | unsigned FAST_FUNC monotonic_sec(void) |
62 | { |
63 | return time(NULL); |
64 | } |
65 | |
66 | #endif |