* opncls.c (bfd_fopen): Always close fd on failure.
	(bfd_fdopenr): Likewise.
gdb/
	* symfile.c (symfile_bfd_open): Don't close desc if bfd_fopen
	fails.
	* solib.c (solib_bfd_fopen): Don't close fd if bfd_fopen fails.
	* exec.c (exec_file_attach): Don't close scratch_chan if bfd_fopen
	fails.
	* dwarf2read.c (try_open_dwo_file): Don't close fd if bfd_fopen
	fails.
This commit is contained in:
Tom Tromey 2012-05-29 14:23:40 +00:00
parent ec95993ca4
commit 6f0c7050fc
7 changed files with 31 additions and 7 deletions

View file

@ -1,3 +1,8 @@
2012-05-29 Tom Tromey <tromey@redhat.com>
* opncls.c (bfd_fopen): Always close fd on failure.
(bfd_fdopenr): Likewise.
2012-05-27 Alan Modra <amodra@gmail.com> 2012-05-27 Alan Modra <amodra@gmail.com>
PR ld/14170 PR ld/14170

View file

@ -1,6 +1,6 @@
/* opncls.c -- open and close a BFD. /* opncls.c -- open and close a BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
Free Software Foundation, Inc. Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
@ -190,6 +190,8 @@ DESCRIPTION
If <<NULL>> is returned then an error has occured. Possible errors If <<NULL>> is returned then an error has occured. Possible errors
are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or
<<system_call>> error. <<system_call>> error.
On error, @var{fd} is always closed.
*/ */
bfd * bfd *
@ -200,11 +202,17 @@ bfd_fopen (const char *filename, const char *target, const char *mode, int fd)
nbfd = _bfd_new_bfd (); nbfd = _bfd_new_bfd ();
if (nbfd == NULL) if (nbfd == NULL)
{
if (fd != -1)
close (fd);
return NULL; return NULL;
}
target_vec = bfd_find_target (target, nbfd); target_vec = bfd_find_target (target, nbfd);
if (target_vec == NULL) if (target_vec == NULL)
{ {
if (fd != -1)
close (fd);
_bfd_delete_bfd (nbfd); _bfd_delete_bfd (nbfd);
return NULL; return NULL;
} }
@ -307,6 +315,8 @@ DESCRIPTION
Possible errors are <<bfd_error_no_memory>>, Possible errors are <<bfd_error_no_memory>>,
<<bfd_error_invalid_target>> and <<bfd_error_system_call>>. <<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
On error, @var{fd} is closed.
*/ */
bfd * bfd *
@ -323,6 +333,10 @@ bfd_fdopenr (const char *filename, const char *target, int fd)
fdflags = fcntl (fd, F_GETFL, NULL); fdflags = fcntl (fd, F_GETFL, NULL);
if (fdflags == -1) if (fdflags == -1)
{ {
int save = errno;
close (fd);
errno = save;
bfd_set_error (bfd_error_system_call); bfd_set_error (bfd_error_system_call);
return NULL; return NULL;
} }

View file

@ -1,3 +1,13 @@
2012-05-29 Tom Tromey <tromey@redhat.com>
* symfile.c (symfile_bfd_open): Don't close desc if bfd_fopen
fails.
* solib.c (solib_bfd_fopen): Don't close fd if bfd_fopen fails.
* exec.c (exec_file_attach): Don't close scratch_chan if bfd_fopen
fails.
* dwarf2read.c (try_open_dwo_file): Don't close fd if bfd_fopen
fails.
2012-05-29 Tristan Gingold <gingold@adacore.com> 2012-05-29 Tristan Gingold <gingold@adacore.com>
* solib-darwin.c (dyld_all_image_addr, dyld_all_image): Move into... * solib-darwin.c (dyld_all_image_addr, dyld_all_image): Move into...

View file

@ -6957,7 +6957,6 @@ try_open_dwo_file (const char *file_name)
sym_bfd = bfd_fopen (absolute_name, gnutarget, FOPEN_RB, desc); sym_bfd = bfd_fopen (absolute_name, gnutarget, FOPEN_RB, desc);
if (!sym_bfd) if (!sym_bfd)
{ {
close (desc);
xfree (absolute_name); xfree (absolute_name);
return NULL; return NULL;
} }

View file

@ -238,7 +238,6 @@ exec_file_attach (char *filename, int from_tty)
if (!exec_bfd) if (!exec_bfd)
{ {
close (scratch_chan);
error (_("\"%s\": could not open as an executable file: %s"), error (_("\"%s\": could not open as an executable file: %s"),
scratch_pathname, bfd_errmsg (bfd_get_error ())); scratch_pathname, bfd_errmsg (bfd_get_error ()));
} }

View file

@ -380,8 +380,6 @@ solib_bfd_fopen (char *pathname, int fd)
if (abfd) if (abfd)
bfd_set_cacheable (abfd, 1); bfd_set_cacheable (abfd, 1);
else if (fd != -1)
close (fd);
} }
if (!abfd) if (!abfd)

View file

@ -1764,7 +1764,6 @@ symfile_bfd_open (char *name)
sym_bfd = bfd_fopen (name, gnutarget, FOPEN_RB, desc); sym_bfd = bfd_fopen (name, gnutarget, FOPEN_RB, desc);
if (!sym_bfd) if (!sym_bfd)
{ {
close (desc);
make_cleanup (xfree, name); make_cleanup (xfree, name);
error (_("`%s': can't open to read symbols: %s."), name, error (_("`%s': can't open to read symbols: %s."), name,
bfd_errmsg (bfd_get_error ())); bfd_errmsg (bfd_get_error ()));