From c4f3d13082964c89028a78caee4ce5395c26fcc1 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 15 Apr 2002 14:32:28 +0000 Subject: [PATCH] Write contents if writeable. --- bfd/ChangeLog | 5 ++++ bfd/opncls.c | 68 ++++++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ca862e3a1e8..0d39a151aeb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-04-15 Michael Snyder + + * opncls.c (bfd_close): Write contents if writeable. + Minor formatting tidy-ups. + 2002-04-15 Alan Modra * elf32-ppc.c (ppc_elf_add_symbol_hook): Check the hash table type. diff --git a/bfd/opncls.c b/bfd/opncls.c index 0b285d4b8ce..49482f01cd2 100644 --- a/bfd/opncls.c +++ b/bfd/opncls.c @@ -1,25 +1,25 @@ /* opncls.c -- open and close a BFD. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, - 2001 + 2001, 2002 Free Software Foundation, Inc. Written by Cygnus Support. -This file is part of BFD, the Binary File Descriptor library. + This file is part of BFD, the Binary File Descriptor library. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" #include "sysdep.h" @@ -39,9 +39,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* fdopen is a loser -- we should use stdio exclusively. Unfortunately if we do that we can't use fcntl. */ -/* FIXME: This is no longer used. */ -long _bfd_chunksize = -1; - /* Return a new BFD. All BFD's are allocated through this routine. */ bfd * @@ -163,7 +160,7 @@ bfd_openr (filename, target) if (bfd_open_file (nbfd) == NULL) { - /* File didn't exist, or some such */ + /* File didn't exist, or some such. */ bfd_set_error (bfd_error_system_call); _bfd_delete_bfd (nbfd); return NULL; @@ -178,8 +175,7 @@ bfd_openr (filename, target) won't cause a storage leak. o - We open the file stream last, since we don't want to have to close it if anything goes wrong. Closing the stream means closing - the file descriptor too, even though we didn't open it. - */ + the file descriptor too, even though we didn't open it. */ /* FUNCTION bfd_fdopenr @@ -218,7 +214,7 @@ bfd_fdopenr (filename, target, fd) bfd_set_error (bfd_error_system_call); #if ! defined(HAVE_FCNTL) || ! defined(F_GETFL) - fdflags = O_RDWR; /* Assume full access */ + fdflags = O_RDWR; /* Assume full access. */ #else fdflags = fcntl (fd, F_GETFL, NULL); #endif @@ -239,7 +235,7 @@ bfd_fdopenr (filename, target, fd) #ifndef HAVE_FDOPEN nbfd->iostream = (PTR) fopen (filename, FOPEN_RB); #else - /* (O_ACCMODE) parens are to avoid Ultrix header file bug */ + /* (O_ACCMODE) parens are to avoid Ultrix header file bug. */ switch (fdflags & (O_ACCMODE)) { case O_RDONLY: nbfd->iostream = (PTR) fdopen (fd, FOPEN_RB); break; @@ -255,14 +251,13 @@ bfd_fdopenr (filename, target, fd) return NULL; } - /* OK, put everything where it belongs */ - + /* OK, put everything where it belongs. */ nbfd->filename = filename; /* As a special case we allow a FD open for read/write to be written through, although doing so requires that we end the previous clause with a preposition. */ - /* (O_ACCMODE) parens are to avoid Ultrix header file bug */ + /* (O_ACCMODE) parens are to avoid Ultrix header file bug. */ switch (fdflags & (O_ACCMODE)) { case O_RDONLY: nbfd->direction = read_direction; break; @@ -329,10 +324,10 @@ bfd_openstreamr (filename, target, streamarg) return nbfd; } -/** bfd_openw -- open for writing. - Returns a pointer to a freshly-allocated BFD on success, or NULL. +/* bfd_openw -- open for writing. + Returns a pointer to a freshly-allocated BFD on success, or NULL. - See comment by bfd_fdopenr before you try to modify this function. */ + See comment by bfd_fdopenr before you try to modify this function. */ /* FUNCTION @@ -360,8 +355,7 @@ bfd_openw (filename, target) bfd_set_error (bfd_error_system_call); /* nbfd has to point to head of malloc'ed block so that bfd_close may - reclaim it correctly. */ - + reclaim it correctly. */ nbfd = _bfd_new_bfd (); if (nbfd == NULL) return NULL; @@ -378,7 +372,8 @@ bfd_openw (filename, target) if (bfd_open_file (nbfd) == NULL) { - bfd_set_error (bfd_error_system_call); /* File not writeable, etc */ + /* File not writeable, etc. */ + bfd_set_error (bfd_error_system_call); _bfd_delete_bfd (nbfd); return NULL; } @@ -417,7 +412,7 @@ bfd_close (abfd) { boolean ret; - if (!bfd_read_p (abfd)) + if (bfd_write_p (abfd)) { if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd))) return false; @@ -429,7 +424,7 @@ bfd_close (abfd) ret = bfd_cache_close (abfd); /* If the file was open for writing and is now executable, - make it so */ + make it so. */ if (ret && abfd->direction == write_direction && abfd->flags & EXEC_P) @@ -439,6 +434,7 @@ bfd_close (abfd) if (stat (abfd->filename, &buf) == 0) { unsigned int mask = umask (0); + umask (mask); chmod (abfd->filename, (0777 @@ -471,7 +467,6 @@ DESCRIPTION RETURNS <> is returned if all is ok, otherwise <>. - */ boolean @@ -483,7 +478,7 @@ bfd_close_all_done (abfd) ret = bfd_cache_close (abfd); /* If the file was open for writing and is now executable, - make it so */ + make it so. */ if (ret && abfd->direction == write_direction && abfd->flags & EXEC_P) @@ -493,6 +488,7 @@ bfd_close_all_done (abfd) if (stat (abfd->filename, &buf) == 0) { unsigned int mask = umask (0); + umask (mask); chmod (abfd->filename, (0777 @@ -517,7 +513,6 @@ DESCRIPTION <>, but without opening a file. The new BFD takes the target from the target used by @var{template}. The format is always set to <>. - */ bfd * @@ -535,6 +530,7 @@ bfd_create (filename, templ) nbfd->xvec = templ->xvec; nbfd->direction = no_direction; bfd_set_format (nbfd, bfd_object); + return nbfd; } @@ -570,7 +566,7 @@ bfd_make_writable(abfd) bim = ((struct bfd_in_memory *) bfd_malloc ((bfd_size_type) sizeof (struct bfd_in_memory))); abfd->iostream = (PTR) bim; - /* bfd_bwrite will grow these as needed */ + /* bfd_bwrite will grow these as needed. */ bim->size = 0; bim->buffer = 0;