summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2007-06-18 22:23:18 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2007-06-18 22:23:18 +0000
commit2da851745e00e862d7afa4dda21276fc859d5c7f (patch)
treefbc324297445cda9a969db222b1a8070c285ca8f
parentb8c8ac122f2f060c9998d20c94d71883bd3435d7 (diff)
downloaddiffutils-2da851745e00e862d7afa4dda21276fc859d5c7f.tar.gz
* src/context.c (print_context_label): Don't assume that time_t
fits in long int, since it doesn't in FreeBSD/arm. Problem reported by Xin Li in <http://lists.gnu.org/archive/html/bug-gnu-utils/2007-06/msg00091.html>.
-rw-r--r--ChangeLog7
-rw-r--r--src/context.c20
2 files changed, 24 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 993f71b..f4b8ebe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-06-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/context.c (print_context_label): Don't assume that time_t
+ fits in long int, since it doesn't in FreeBSD/arm. Problem
+ reported by Xin Li in
+ <http://lists.gnu.org/archive/html/bug-gnu-utils/2007-06/msg00091.html>.
+
2007-06-06 Paul Eggert <eggert@cs.ucla.edu>
* NEWS: Mention new sdiff aliases 1 and 2 for l and r.
diff --git a/src/context.c b/src/context.c
index 8d4789a..3d50b79 100644
--- a/src/context.c
+++ b/src/context.c
@@ -54,9 +54,23 @@ print_context_label (char const *mark,
int nsec = get_stat_mtime_ns (&inf->stat);
if (! (tm && nstrftime (buf, sizeof buf, time_format, tm, 0, nsec)))
{
- long int sec = inf->stat.st_mtime;
- verify (sizeof inf->stat.st_mtime <= sizeof sec);
- sprintf (buf, "%ld.%.9d", sec, nsec);
+ verify ((time_t) 1.5 == 1);
+ if (LONG_MIN <= TYPE_MINIMUM (time_t)
+ && TYPE_MAXIMUM (time_t) <= LONG_MAX)
+ {
+ long int sec = inf->stat.st_mtime;
+ sprintf (buf, "%ld.%.9d", sec, nsec);
+ }
+ else if (TYPE_MAXIMUM (time_t) <= INTMAX_MAX)
+ {
+ intmax_t sec = inf->stat.st_mtime;
+ sprintf (buf, "%"PRIdMAX".%.9d", sec, nsec);
+ }
+ else
+ {
+ uintmax_t sec = inf->stat.st_mtime;
+ sprintf (buf, "%"PRIuMAX".%.9d", sec, nsec);
+ }
}
fprintf (outfile, "%s %s\t%s\n", mark, inf->name, buf);
}