]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2011-06-27 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Mon, 27 Jun 2011 08:24:21 +0000 (08:24 +0000)
committerTristan Gingold <gingold@adacore.com>
Mon, 27 Jun 2011 08:24:21 +0000 (08:24 +0000)
* vms-misc.c (vms_time_to_time_t): Adjust overflow detection.
Add comment.

bfd/ChangeLog
bfd/vms-misc.c

index 58bf9934a85eb2a6d154b33a32900ed86199f022..5028141af182383a0ae606d3f356ab1a541b9cf3 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-27  Tristan Gingold  <gingold@adacore.com>
+
+       * vms-misc.c (vms_time_to_time_t): Adjust overflow detection.
+       Add comment.
+
 2011-06-25  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf64-x86-64.c (elf_backend_post_process_headers): Don't
index a2665b7e4f938986a45aeb3e5394278ff8b5d23a..2ea2267d182dc390ba7bacd880cf29bd284b2e82 100644 (file)
@@ -530,7 +530,10 @@ vms_get_module_name (const char *filename, bfd_boolean upcase)
    -  100ns granularity
    -  epoch is Nov 17, 1858.
    Here has the constants and the routines used to convert VMS from/to UNIX time.
-   The conversion routines don't assume 64 bits arithmetic.  */
+   The conversion routines don't assume 64 bits arithmetic.
+
+   Here we assume that the definition of time_t is the UNIX one, ie integer
+   type, expressing seconds since the epoch.  */
 
 /* UNIX time granularity for VMS, ie 1s / 100ns.  */
 #define VMS_TIME_FACTOR 10000000
@@ -546,6 +549,7 @@ vms_time_to_time_t (unsigned int hi, unsigned int lo)
   unsigned int tmp;
   unsigned int rlo;
   int i;
+  time_t res;
 
   /* First convert to seconds.  */
   tmp = hi % VMS_TIME_FACTOR;
@@ -562,14 +566,18 @@ vms_time_to_time_t (unsigned int hi, unsigned int lo)
   lo = rlo;
 
   /* Return 0 in case of overflow.  */
-  if (lo > VMS_TIME_OFFSET && hi > 1)
+  if (hi > 1
+      || (hi == 1 && lo >= VMS_TIME_OFFSET))
     return 0;
 
   /* Return 0 in case of underflow.  */
-  if (lo < VMS_TIME_OFFSET)
+  if (hi == 0 && lo < VMS_TIME_OFFSET)
     return 0;
 
-  return lo - VMS_TIME_OFFSET;
+  res = lo - VMS_TIME_OFFSET;
+  if (res <= 0)
+    return 0;
+  return res;
 }
 
 /* Convert a time_t to a VMS time.  */