timespec: long-to-int truncation could make timespec_cmp malfunction
authorJim Meyering <meyering@redhat.com>
Thu, 29 Oct 2009 10:52:34 +0000 (11:52 +0100)
committerJim Meyering <meyering@redhat.com>
Thu, 29 Oct 2009 10:52:34 +0000 (11:52 +0100)
* lib/timespec.h (timespec_cmp): Do not interpret a difference of
a multiple of 2^32 nanoseconds as no difference.

ChangeLog
lib/timespec.h

index 7982453..b2073ee 100644 (file)
--- 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)"
index 3f51db8..db3453a 100644 (file)
@@ -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 @@ timespec_cmp (struct timespec a, struct timespec b)
 {
   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 *);