* 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>
PR ld/14170

View File

@ -1,6 +1,6 @@
/* opncls.c -- open and close a BFD.
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.
Written by Cygnus Support.
@ -190,6 +190,8 @@ DESCRIPTION
If <<NULL>> is returned then an error has occured. Possible errors
are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or
<<system_call>> error.
On error, @var{fd} is always closed.
*/
bfd *
@ -200,11 +202,17 @@ bfd_fopen (const char *filename, const char *target, const char *mode, int fd)
nbfd = _bfd_new_bfd ();
if (nbfd == NULL)
return NULL;
{
if (fd != -1)
close (fd);
return NULL;
}
target_vec = bfd_find_target (target, nbfd);
if (target_vec == NULL)
{
if (fd != -1)
close (fd);
_bfd_delete_bfd (nbfd);
return NULL;
}
@ -307,6 +315,8 @@ DESCRIPTION
Possible errors are <<bfd_error_no_memory>>,
<<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
On error, @var{fd} is closed.
*/
bfd *
@ -323,6 +333,10 @@ bfd_fdopenr (const char *filename, const char *target, int fd)
fdflags = fcntl (fd, F_GETFL, NULL);
if (fdflags == -1)
{
int save = errno;
close (fd);
errno = save;
bfd_set_error (bfd_error_system_call);
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>
* 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);
if (!sym_bfd)
{
close (desc);
xfree (absolute_name);
return NULL;
}

View File

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

View File

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

View File

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