Commit 5f7df925 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

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.
parent a5bed4da
Loading
Loading
Loading
Loading

changes/bug18184

0 → 100644
+5 −0
Original line number Diff line number Diff line
  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
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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