* contrib/ari/gdb_ari.sh: Remove rules for xasprintf and
[deliverable/binutils-gdb.git] / bfd / vms-misc.c
index 49b8274e772a8f4fdb236717984722c864a725a5..2ea2267d182dc390ba7bacd880cf29bd284b2e82 100644 (file)
@@ -348,7 +348,7 @@ _bfd_vms_output_quad (struct vms_rec_wr *recwr, bfd_vma value)
 /* Output c-string as counted string.  */
 
 void
-_bfd_vms_output_counted (struct vms_rec_wr *recwr, char *value)
+_bfd_vms_output_counted (struct vms_rec_wr *recwr, const char *value)
 {
   int len;
 
@@ -366,13 +366,13 @@ _bfd_vms_output_counted (struct vms_rec_wr *recwr, char *value)
       return;
     }
   _bfd_vms_output_byte (recwr, (unsigned int) len & 0xff);
-  _bfd_vms_output_dump (recwr, (unsigned char *) value, len);
+  _bfd_vms_output_dump (recwr, (const unsigned char *)value, len);
 }
 
 /* Output character area.  */
 
 void
-_bfd_vms_output_dump (struct vms_rec_wr *recwr, unsigned char *data, int len)
+_bfd_vms_output_dump (struct vms_rec_wr *recwr, const unsigned char *data, int len)
 {
   vms_debug2 ((6, "_bfd_vms_output_dump (%d)\n", len));
 
@@ -401,8 +401,8 @@ _bfd_vms_output_fill (struct vms_rec_wr *recwr, int value, int count)
    using undocumented system call sys$modify().
    Pure VMS version.  */
 
-void
-_bfd_vms_convert_to_var (char * vms_filename)
+static void
+vms_convert_to_var (char * vms_filename)
 {
   struct FAB fab = cc$rms_fab;
 
@@ -433,8 +433,8 @@ vms_convert_to_var_1 (char *filename, int type)
    using undocumented system call sys$modify().
    Unix filename version.  */
 
-static int
-vms_convert_to_var_unix_filename (const char *unix_filename)
+int
+_bfd_vms_convert_to_var_unix_filename (const char *unix_filename)
 {
   if (decc$to_vms (unix_filename, &vms_convert_to_var_1, 0, 1) != 1)
     return FALSE;
@@ -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.  */
This page took 0.026943 seconds and 4 git commands to generate.