From d387240a63cfb5562d2fd7c6273bbc62f4383284 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Fri, 14 Nov 2008 09:57:35 +0000 Subject: bfd/ 2008-11-14 Tristan Gingold * configure.com: Handle bfd_default_target_size, BFD_HOST_LONG_LONG, BFD_HOST_64BIT_LONG_LONG, BFD_HOSTPTR_T, bfd_file_ptr. Generate bfdver.h. * vms-hdr.c (_bfd_vms_write_hdr): Use strdup/free instead of alloca. * hosts/alphavms.h: Defines macros to bypass i18n. * makefile.vms (OBJS): Update file list. (DEFS): Remove VMS_DEBUG, const, add DEBUGDIR. (CFLAGS): Update flags. * bfdio.c (real_fopen): Add code specific to VMS: extract attributes from modes. binutils/ 2008-11-14 Tristan Gingold * configure.com: Get version from configure.in of bfd. * makefile.vms-in (DEBUG_OBJS): Add dwarf.obj. (CFLAGS): Update flags. include/ 2008-11-14 Tristan Gingold * fopen-vms.h (FOPEN_RB): Use a single string to match the standard prototype. (FOPEN_WB): Ditto. (FOPEN_AB): Ditto. (FOPEN_RUB): Ditto. (FOPEN_WUB): Ditto. (FOPEN_AUB): Ditto. libiberty/ 2008-11-14 Tristan Gingold * makefile.vms (OBJS): Update objects list. (CFLAGS): Update. (libiberty.olb): Remove alloca-conf.h dependency. * config.h-vms: Use new macro sets, use builtin alloca. opcodes/ 2008-11-14 Tristan Gingold * makefile.vms (OBJS): Update list of objects. (DEFS): Update (CFLAGS): Update. --- bfd/bfdio.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'bfd/bfdio.c') diff --git a/bfd/bfdio.c b/bfd/bfdio.c index cb06453..7cba51f 100644 --- a/bfd/bfdio.c +++ b/bfd/bfdio.c @@ -86,11 +86,37 @@ close_on_exec (FILE *file) FILE * real_fopen (const char *filename, const char *modes) { +#ifdef VMS + char vms_modes[4]; + char *vms_attr; + + /* On VMS, fopen allows file attributes as optionnal arguments. + We need to use them but we'd better to use the common prototype. + In fopen-vms.h, they are separated from the mode with a comma. + Split here. */ + vms_attr = strchr (modes, ','); + if (vms_attr == NULL) + { + /* No attributes. */ + return close_on_exec (fopen (filename, modes)); + } + else + { + /* Attribute found - rebuild modes. */ + size_t modes_len = vms_attr - modes; + + BFD_ASSERT (modes_len < sizeof (vms_modes)); + memcpy (vms_modes, modes, modes_len); + vms_modes[modes_len] = 0; + return close_on_exec (fopen (filename, vms_modes, vms_attr + 1)); + } +#else /* !VMS */ #if defined (HAVE_FOPEN64) return close_on_exec (fopen64 (filename, modes)); #else return close_on_exec (fopen (filename, modes)); #endif +#endif /* !VMS */ } /* -- cgit v1.1