Changeset 1964 for cpio/vendor/current/gnu/timespec.h
- Timestamp:
- Feb 3, 2017, 2:02:34 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified cpio/vendor/current/gnu/timespec.h ¶
r118 r1964 1 /* -*- buffer-read-only: t -*- vi: set ro: */2 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */3 1 /* timespec -- System time interface 4 2 5 Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-201 0Free Software3 Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2015 Free Software 6 4 Foundation, Inc. 7 5 … … 24 22 # include <time.h> 25 23 24 #ifndef _GL_INLINE_HEADER_BEGIN 25 #error "Please include config.h first." 26 #endif 27 _GL_INLINE_HEADER_BEGIN 28 #ifndef _GL_TIMESPEC_INLINE 29 # define _GL_TIMESPEC_INLINE _GL_INLINE 30 #endif 31 32 /* Resolution of timespec time stamps (in units per second), and log 33 base 10 of the resolution. */ 34 35 enum { TIMESPEC_RESOLUTION = 1000000000 }; 36 enum { LOG10_TIMESPEC_RESOLUTION = 9 }; 37 38 /* Return a timespec with seconds S and nanoseconds NS. */ 39 40 _GL_TIMESPEC_INLINE struct timespec 41 make_timespec (time_t s, long int ns) 42 { 43 struct timespec r; 44 r.tv_sec = s; 45 r.tv_nsec = ns; 46 return r; 47 } 48 26 49 /* Return negative, zero, positive if A < B, A == B, A > B, respectively. 27 Assume the nanosecond components are in range, or close to it. */ 28 static inline int 50 51 For each time stamp T, this code assumes that either: 52 53 * T.tv_nsec is in the range 0..999999999; or 54 * T.tv_sec corresponds to a valid leap second on a host that supports 55 leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or 56 * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or 57 T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000. 58 This allows for special struct timespec values that are less or 59 greater than all possible valid time stamps. 60 61 In all these cases, it is safe to subtract two tv_nsec values and 62 convert the result to integer without worrying about overflow on 63 any platform of interest to the GNU project, since all such 64 platforms have 32-bit int or wider. 65 66 Replacing "(int) (a.tv_nsec - b.tv_nsec)" with something like 67 "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause 68 this function to work in some cases where the above assumption is 69 violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2, 70 b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the 71 extra instructions. Using a subtraction has the advantage of 72 detecting some invalid cases on platforms that detect integer 73 overflow. 74 75 The (int) cast avoids a gcc -Wconversion warning. */ 76 77 _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE 29 78 timespec_cmp (struct timespec a, struct timespec b) 30 79 { 31 80 return (a.tv_sec < b.tv_sec ? -1 32 81 : a.tv_sec > b.tv_sec ? 1 33 : a.tv_nsec < b.tv_nsec ? -1 34 : a.tv_nsec > b.tv_nsec ? 1 35 : 0); 82 : (int) (a.tv_nsec - b.tv_nsec)); 83 } 84 85 /* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be 86 nonnegative. */ 87 _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE 88 timespec_sign (struct timespec a) 89 { 90 return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; 91 } 92 93 struct timespec timespec_add (struct timespec, struct timespec) 94 _GL_ATTRIBUTE_CONST; 95 struct timespec timespec_sub (struct timespec, struct timespec) 96 _GL_ATTRIBUTE_CONST; 97 struct timespec dtotimespec (double) 98 _GL_ATTRIBUTE_CONST; 99 100 /* Return an approximation to A, of type 'double'. */ 101 _GL_TIMESPEC_INLINE double 102 timespectod (struct timespec a) 103 { 104 return a.tv_sec + a.tv_nsec / 1e9; 36 105 } 37 106 … … 39 108 int settime (struct timespec const *); 40 109 110 _GL_INLINE_HEADER_END 111 41 112 #endif
Note:
See TracChangeset
for help on using the changeset viewer.