Browse Source

Remove support for unsigned time_t

We've never actually tested this support, and we should probably assume
it's broken.

To the best of my knowledge, only OpenVMS has this, and even on
OpenVMS it's a compile-time option to disable it.  And I don't think
we build on openvms anyway.  (Everybody else seems to be working
around the 2038 problem by using a 64-bit time_t, which won't expire
for roughly 292 billion years.)

Closes ticket 18184.
Nick Mathewson 8 years ago
parent
commit
5f7df92571
5 changed files with 9 additions and 33 deletions
  1. 5 0
      changes/bug18184
  2. 2 2
      configure.ac
  3. 2 26
      src/common/torint.h
  4. 0 2
      src/test/test_dir.c
  5. 0 3
      src/win32/orconfig.h

+ 5 - 0
changes/bug18184

@@ -0,0 +1,5 @@
+  o Removed platform support:
+    - Tor no longer attempts to support platforms where the "time_t" type
+      is unsigned.  (To the best of our knowledge, only OpenVMS does this,
+      and Tor has never actually built on OpenVMS.)  Closes ticket 18184.
+

+ 2 - 2
configure.ac

@@ -1176,7 +1176,7 @@ AC_CHECK_TYPES([rlim_t], , ,
 ])
 
 AX_CHECK_SIGN([time_t],
-       [ AC_DEFINE(TIME_T_IS_SIGNED, 1, [Define if time_t is signed]) ],
+       [ : ],
        [ : ], [
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -1190,7 +1190,7 @@ AX_CHECK_SIGN([time_t],
 ])
 
 if test "$ax_cv_decl_time_t_signed" = no; then
-  AC_MSG_WARN([You have an unsigned time_t; some things will probably break. Please tell the Tor developers about your interesting platform.])
+  AC_MSG_ERROR([You have an unsigned time_t; Tor does not support that. Please tell the Tor developers about your interesting platform.])
 fi
 
 AX_CHECK_SIGN([size_t],

+ 2 - 26
src/common/torint.h

@@ -312,8 +312,6 @@ typedef uint32_t uintptr_t;
 
 #ifndef TIME_MAX
 
-#ifdef TIME_T_IS_SIGNED
-
 #if (SIZEOF_TIME_T == SIZEOF_INT)
 #define TIME_MAX ((time_t)INT_MAX)
 #elif (SIZEOF_TIME_T == SIZEOF_LONG)
@@ -321,25 +319,13 @@ typedef uint32_t uintptr_t;
 #elif (SIZEOF_TIME_T == 8)
 #define TIME_MAX ((time_t)INT64_MAX)
 #else
-#error "Can't define (signed) TIME_MAX"
+#error "Can't define TIME_MAX"
 #endif
 
-#else
-/* Unsigned case */
-#if (SIZEOF_TIME_T == 4)
-#define TIME_MAX ((time_t)UINT32_MAX)
-#elif (SIZEOF_TIME_T == 8)
-#define TIME_MAX ((time_t)UINT64_MAX)
-#else
-#error "Can't define (unsigned) TIME_MAX"
-#endif
-#endif /* time_t_is_signed */
 #endif /* ifndef(TIME_MAX) */
 
 #ifndef TIME_MIN
 
-#ifdef TIME_T_IS_SIGNED
-
 #if (SIZEOF_TIME_T == SIZEOF_INT)
 #define TIME_MIN ((time_t)INT_MIN)
 #elif (SIZEOF_TIME_T == SIZEOF_LONG)
@@ -347,19 +333,9 @@ typedef uint32_t uintptr_t;
 #elif (SIZEOF_TIME_T == 8)
 #define TIME_MIN ((time_t)INT64_MIN)
 #else
-#error "Can't define (signed) TIME_MIN"
+#error "Can't define TIME_MIN"
 #endif
 
-#else
-/* Unsigned case */
-#if (SIZEOF_TIME_T == 4)
-#define TIME_MIN ((time_t)UINT32_MIN)
-#elif (SIZEOF_TIME_T == 8)
-#define TIME_MIN ((time_t)UINT64_MIN)
-#else
-#error "Can't define (unsigned) TIME_MIN"
-#endif
-#endif /* time_t_is_signed */
 #endif /* ifndef(TIME_MIN) */
 
 #ifndef SIZE_MAX

+ 0 - 2
src/test/test_dir.c

@@ -3312,7 +3312,6 @@ test_dir_download_status_schedule(void *arg)
   tt_assert(increment == expected_increment);
   tt_assert(dls_failure.next_attempt_at == TIME_MIN + expected_increment);
 
-#if TIME_T_IS_SIGNED
   delay1 = INT_MAX;
   increment =  download_status_schedule_get_delay(&dls_failure,
                                                   schedule,
@@ -3320,7 +3319,6 @@ test_dir_download_status_schedule(void *arg)
   expected_increment = delay1;
   tt_assert(increment == expected_increment);
   tt_assert(dls_failure.next_attempt_at == TIME_MAX);
-#endif
 
   delay1 = 0;
   increment = download_status_schedule_get_delay(&dls_attempt,

+ 0 - 3
src/win32/orconfig.h

@@ -220,9 +220,6 @@
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS
 
-/* Define to 1 if time_t is signed. */
-#define TIME_T_IS_SIGNED
-
 /* Define to 1 iff unaligned int access is allowed */
 #define UNALIGNED_INT_ACCESS_OK