Magellan Linux

Annotation of /tags/mkinitrd-6_1_12/busybox/libbb/time.c

Parent Directory Parent Directory | Revision Log 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)
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