summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--lib/tar/internal.h1
-rw-r--r--lib/tar/read_header.c16
-rw-r--r--tests/tar_gnu.c12
-rw-r--r--tests/tar_pax.c12
-rw-r--r--tests/tar_ustar.c12
-rw-r--r--tests/test.h1
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>