X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fvms-misc.c;h=94a13c736b7c858004e732b71e6045cab6b23611;hb=5b677558bc6c7b2477bb33c709e6017e68e7ae8c;hp=984004337d13e0338882fcec836f35110a98c954;hpb=81bb31c0d9904c80f282134ea1ccb6899f93b0a6;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/vms-misc.c b/bfd/vms-misc.c index 984004337d..94a13c736b 100644 --- a/bfd/vms-misc.c +++ b/bfd/vms-misc.c @@ -1,7 +1,6 @@ /* vms-misc.c -- BFD back-end for VMS/VAX (openVMS/VAX) and EVAX (openVMS/Alpha) files. - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1996-2016 Free Software Foundation, Inc. Miscellaneous functions. @@ -401,8 +400,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 +432,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 +529,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 +548,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 +565,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. */