diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | lib/tar/internal.h | 1 | ||||
-rw-r--r-- | lib/tar/read_header.c | 16 | ||||
-rw-r--r-- | tests/tar_gnu.c | 12 | ||||
-rw-r--r-- | tests/tar_pax.c | 12 | ||||
-rw-r--r-- | tests/tar_ustar.c | 12 | ||||
-rw-r--r-- | tests/test.h | 1 |
7 files changed, 31 insertions, 25 deletions
diff --git a/configure.ac b/configure.ac index 9da88e0..3804631 100644 --- a/configure.ac +++ b/configure.ac @@ -226,9 +226,7 @@ PKG_CHECK_MODULES(READLINE, [readline], [have_readline="yes"], AM_CONDITIONAL([WITH_READLINE], [test "x$have_readline" = "xyes"]) ##### additional checks ##### -AX_COMPILE_CHECK_SIZEOF(time_t) AX_COMPILE_CHECK_SIZEOF(size_t) -AX_COMPILE_CHECK_SIZEOF(short) AX_COMPILE_CHECK_SIZEOF(int) AX_COMPILE_CHECK_SIZEOF(long) AX_COMPILE_CHECK_SIZEOF(long long) diff --git a/lib/tar/internal.h b/lib/tar/internal.h index 755d4eb..57746ae 100644 --- a/lib/tar/internal.h +++ b/lib/tar/internal.h @@ -13,6 +13,7 @@ #include <string.h> #include <stdlib.h> +#include <limits.h> #include <ctype.h> #include <stdio.h> diff --git a/lib/tar/read_header.c b/lib/tar/read_header.c index 0591879..2918d09 100644 --- a/lib/tar/read_header.c +++ b/lib/tar/read_header.c @@ -155,17 +155,17 @@ static int decode_header(const tar_header_t *hdr, unsigned int set_by_pax, break; } -#if SIZEOF_TIME_T < 8 - if (out->mtime > (sqfs_s64)INT32_MAX) { - out->sb.st_mtime = INT32_MAX; - } else if (out->mtime < (sqfs_s64)INT32_MIN) { - out->sb.st_mtime = INT32_MIN; + if (sizeof(time_t) * CHAR_BIT < 64) { + if (out->mtime > (sqfs_s64)INT32_MAX) { + out->sb.st_mtime = INT32_MAX; + } else if (out->mtime < (sqfs_s64)INT32_MIN) { + out->sb.st_mtime = INT32_MIN; + } else { + out->sb.st_mtime = out->mtime; + } } else { out->sb.st_mtime = out->mtime; } -#else - out->sb.st_mtime = out->mtime; -#endif return 0; } diff --git a/tests/tar_gnu.c b/tests/tar_gnu.c index 9d0b010..9746cb0 100644 --- a/tests/tar_gnu.c +++ b/tests/tar_gnu.c @@ -95,11 +95,13 @@ int main(void) TEST_EQUAL_UI(hdr.sb.st_uid, 01750); TEST_EQUAL_UI(hdr.sb.st_gid, 01750); TEST_EQUAL_UI(hdr.sb.st_size, 5); -#if SIZEOF_TIME_T < 8 - TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); -#else - TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); -#endif + + if (sizeof(time_t) * CHAR_BIT < 64) { + TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); + } else { + TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); + } + TEST_EQUAL_UI(hdr.mtime, 8589934592L); TEST_STR_EQUAL(hdr.name, "input.txt"); TEST_ASSERT(!hdr.unknown_record); diff --git a/tests/tar_pax.c b/tests/tar_pax.c index f2e4c5f..86dc186 100644 --- a/tests/tar_pax.c +++ b/tests/tar_pax.c @@ -78,11 +78,13 @@ int main(void) TEST_EQUAL_UI(hdr.sb.st_uid, 01750); TEST_EQUAL_UI(hdr.sb.st_gid, 01750); TEST_EQUAL_UI(hdr.sb.st_size, 5); -#if SIZEOF_TIME_T < 8 - TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); -#else - TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); -#endif + + if (sizeof(time_t) * CHAR_BIT < 64) { + TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); + } else { + TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); + } + TEST_EQUAL_UI(hdr.mtime, 8589934592L); TEST_STR_EQUAL(hdr.name, "input.txt"); TEST_ASSERT(!hdr.unknown_record); diff --git a/tests/tar_ustar.c b/tests/tar_ustar.c index 8d4c828..b794e30 100644 --- a/tests/tar_ustar.c +++ b/tests/tar_ustar.c @@ -110,11 +110,13 @@ int main(void) TEST_EQUAL_UI(hdr.sb.st_uid, 01750); TEST_EQUAL_UI(hdr.sb.st_gid, 01750); TEST_EQUAL_UI(hdr.sb.st_size, 5); -#if SIZEOF_TIME_T < 8 - TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); -#else - TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); -#endif + + if (sizeof(time_t) * CHAR_BIT < 64) { + TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); + } else { + TEST_EQUAL_UI(hdr.sb.st_mtime, 8589934592L); + } + TEST_EQUAL_UI(hdr.mtime, 8589934592L); TEST_STR_EQUAL(hdr.name, "input.txt"); TEST_ASSERT(!hdr.unknown_record); diff --git a/tests/test.h b/tests/test.h index 4e05dac..7d38fd0 100644 --- a/tests/test.h +++ b/tests/test.h @@ -9,6 +9,7 @@ #include <stdlib.h> #include <string.h> +#include <limits.h> #include <stdio.h> #include <errno.h> |