X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fvms-misc.c;h=2ea2267d182dc390ba7bacd880cf29bd284b2e82;hb=8729a6f6a5148fb4dcb280a95dc0bdc35f02b96e;hp=984004337d13e0338882fcec836f35110a98c954;hpb=81bb31c0d9904c80f282134ea1ccb6899f93b0a6;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/vms-misc.c b/bfd/vms-misc.c index 984004337d..2ea2267d18 100644 --- a/bfd/vms-misc.c +++ b/bfd/vms-misc.c @@ -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. */