File 0011-Fix-stat64-st_-acm-time-decoding-for-personalities-w.patch of Package strace.2926

From bce1ff5f881c3fe7b921637af2ee06dd0cdceef4 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@altlinux.org>
Date: Thu, 12 Mar 2015 16:59:01 +0000
Subject: [PATCH 11/15] Fix stat64 st_[acm]time decoding for personalities with
 32-bit time_t

STRUCT_STAT.st_[acm]time are declared as unsigned int for some
personalities, while time_t is signed.

* printstat.h (DO_PRINTSTAT): If st_[acm]time have the same size as int,
explicitly cast them to int.
* tests/stat64-v.test: Test that negative time_t is decoded properly.

Reported-by: Andreas Schwab <schwab@suse.de>
---
 printstat.h         | 14 +++++++++++---
 tests/stat64-v.test |  3 +--
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/printstat.h b/printstat.h
index dd0b02e..53112fe 100644
--- a/printstat.h
+++ b/printstat.h
@@ -57,9 +57,17 @@ DO_PRINTSTAT(struct tcb *tcp, const STRUCT_STAT *statbuf)
 	}
 
 	if (!abbrev(tcp)) {
-		tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
-		tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
-		tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
+		const bool cast = sizeof(statbuf->st_atime) == sizeof(int);
+
+		tprintf("st_atime=%s, ",
+			sprinttime(cast ? (time_t) (int) statbuf->st_atime:
+					  (time_t) statbuf->st_atime));
+		tprintf("st_mtime=%s, ",
+			sprinttime(cast ? (time_t) (int) statbuf->st_mtime:
+					  (time_t) statbuf->st_mtime));
+		tprintf("st_ctime=%s",
+			sprinttime(cast ? (time_t) (int) statbuf->st_ctime:
+					  (time_t) statbuf->st_ctime));
 #if HAVE_STRUCT_STAT_ST_FLAGS
 		tprintf(", st_flags=%u", (unsigned int) statbuf->st_flags);
 #endif
diff --git a/tests/stat64-v.test b/tests/stat64-v.test
index 4915386..f03254a 100755
--- a/tests/stat64-v.test
+++ b/tests/stat64-v.test
@@ -22,8 +22,7 @@ $truncate_cmd > "$OUT" 2>&1 || {
 ./stat $sample > /dev/null ||
 	fail_ 'stat failed'
 
-touch -d '1970-01-01 36028797018963968 seconds' $sample ||
-touch -t 0102030405 $sample
+touch -d '1970-01-01 -42 seconds' $sample
 
 for f in $sample . /dev/null; do
 	args="-v -efile ./stat $f"
-- 
2.3.3

openSUSE Build Service is sponsored by