diff options
-rw-r--r-- | source4/lib/time.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/source4/lib/time.c b/source4/lib/time.c index c9cf0b9630..b8ef3d7724 100644 --- a/source4/lib/time.c +++ b/source4/lib/time.c @@ -23,13 +23,26 @@ #include "includes.h" #include "system/time.h" +#ifndef CHAR_BIT +# define CHAR_BIT 8 +#endif + +/* The extra casts work around common compiler bugs. */ +#define _TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) +/* The outer cast is needed to work around a bug in Cray C 5.0.3.0. + It is necessary at least when t == time_t. */ +#define _TYPE_MINIMUM(t) ((t) (_TYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0)) +#define _TYPE_MAXIMUM(t) ((t) (~ (t) 0 - _TYPE_MINIMUM (t))) + #ifndef TIME_T_MIN #define TIME_T_MIN 0 #endif #ifndef TIME_T_MAX -#define TIME_T_MAX (~(time_t)0) +#define TIME_T_MAX _TYPE_MAXIMUM (time_t) #endif - + + /******************************************************************* External access to time_t_min and time_t_max. ********************************************************************/ @@ -69,7 +82,7 @@ time_t nt_time_to_unix(NTTIME nt) nt /= 1000*1000*10; nt -= TIME_FIXUP_CONSTANT; - if (TIME_T_MIN >= nt || nt >= TIME_T_MAX) { + if (TIME_T_MIN > nt || nt > TIME_T_MAX) { return 0; } |