r12431: - the TIME_T_MAX needs to be a singed max value
authorStefan Metzmacher <metze@samba.org>
Thu, 22 Dec 2005 11:13:05 +0000 (11:13 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:47:38 +0000 (13:47 -0500)
- fix the calculation of TIME_T_MAX -> nttime -> TIME_T_MAX

metze

source/lib/time.c

index c9cf0b9630ff8330011fc0d62c05d18eef51a81e..b8ef3d77240bba3d26251117174c9904040f6690 100644 (file)
 #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;
        }