changeset 12207:35acba1c7bcd

timespec: long-to-int truncation could make timespec_cmp malfunction * lib/timespec.h (timespec_cmp): Do not interpret a difference of a multiple of 2^32 nanoseconds as no difference.
author Jim Meyering <meyering@redhat.com>
date Thu, 29 Oct 2009 11:52:34 +0100
parents 5b7b0b8645f1
children a377ab624fcc
files ChangeLog lib/timespec.h
diffstat 2 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-29  Jim Meyering  <meyering@redhat.com>
+
+	timespec: long-to-int truncation could make timespec_cmp malfunction
+	* lib/timespec.h (timespec_cmp): Do not interpret a difference of
+	a multiple of 2^32 nanoseconds as no difference.
+
 2009-10-28  Jim Meyering  <meyering@redhat.com>
 
 	fprintftime: wrap macro code argument in "do {...} while(0)"
--- a/lib/timespec.h
+++ b/lib/timespec.h
@@ -1,6 +1,6 @@
 /* timespec -- System time interface
 
-   Copyright (C) 2000, 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -27,7 +27,9 @@
 {
   return (a.tv_sec < b.tv_sec ? -1
 	  : a.tv_sec > b.tv_sec ? 1
-	  : a.tv_nsec - b.tv_nsec);
+	  : a.tv_nsec < b.tv_nsec ? -1
+	  : a.tv_nsec > b.tv_nsec ? 1
+	  : 0);
 }
 
 void gettime (struct timespec *);