Annotation of /tags/mkinitrd-6_1_12/busybox/libbb/time.c
Parent Directory | Revision Log
Revision 939 -
(hide annotations)
(download)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 1439 byte(s)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 1439 byte(s)
tagged 'mkinitrd-6_1_12'
1 | niro | 816 | /* 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 |