* objcopy.c (copy_archive): Check bfd_openw result in unknown object

case.  Rewrite without goto.
This commit is contained in:
Alan Modra 2011-05-06 14:41:56 +00:00
parent d8228535f5
commit 19094d10cd
2 changed files with 36 additions and 32 deletions

View File

@ -1,3 +1,8 @@
2011-05-07 Alan Modra <amodra@gmail.com>
* objcopy.c (copy_archive): Check bfd_openw result in unknown object
case. Rewrite without goto.
2011-05-03 Jakub Jelinek <jakub@redhat.com>
* dwarf.c (decode_location_expression): Handle DW_OP_GNU_const_type,

View File

@ -1,6 +1,6 @@
/* objcopy.c -- copy object file from input to output, optionally massaging it.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@ -2024,6 +2024,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
struct stat buf;
int stat_status = 0;
bfd_boolean del = TRUE;
bfd_boolean ok_object;
/* Create an output file for this member. */
output_name = concat (dir, "/",
@ -2061,44 +2062,42 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
l->obfd = NULL;
list = l;
if (bfd_check_format (this_element, bfd_object))
{
/* PR binutils/3110: Cope with archives
containing multiple target types. */
if (force_output_target)
output_bfd = bfd_openw (output_name, output_target);
else
output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
ok_object = bfd_check_format (this_element, bfd_object);
if (!ok_object)
bfd_nonfatal_message (NULL, this_element, NULL,
_("Unable to recognise the format of file"));
if (output_bfd == NULL)
/* PR binutils/3110: Cope with archives
containing multiple target types. */
if (force_output_target || !ok_object)
output_bfd = bfd_openw (output_name, output_target);
else
output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
if (output_bfd == NULL)
{
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
status = 1;
return;
}
if (ok_object)
{
del = !copy_object (this_element, output_bfd, input_arch);
if (del && bfd_get_arch (this_element) == bfd_arch_unknown)
/* Try again as an unknown object file. */
ok_object = FALSE;
else if (!bfd_close (output_bfd))
{
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
/* Error in new object file. Don't change archive. */
status = 1;
return;
}
del = ! copy_object (this_element, output_bfd, input_arch);
if (! del
|| bfd_get_arch (this_element) != bfd_arch_unknown)
{
if (!bfd_close (output_bfd))
{
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
/* Error in new object file. Don't change archive. */
status = 1;
}
}
else
goto copy_unknown_element;
}
else
{
bfd_nonfatal_message (NULL, this_element, NULL,
_("Unable to recognise the format of file"));
output_bfd = bfd_openw (output_name, output_target);
copy_unknown_element:
if (!ok_object)
{
del = !copy_unknown_object (this_element, output_bfd);
if (!bfd_close_all_done (output_bfd))
{