* archive.c (bfd_generic_archive_p): Return target and keep

ardata on partial matches.
	* format.c (bfd_check_format_matches): Adjust for above
	change.  Remove bfd_error_file_ambiguously_recognized dead
	code.
This commit is contained in:
Alan Modra 2013-01-28 07:58:16 +00:00
parent 616e8b7163
commit 89d7b8aa6b
3 changed files with 47 additions and 44 deletions

View File

@ -1,3 +1,11 @@
2013-01-28 Alan Modra <amodra@gmail.com>
* archive.c (bfd_generic_archive_p): Return target and keep
ardata on partial matches.
* format.c (bfd_check_format_matches): Adjust for above
change. Remove bfd_error_file_ambiguously_recognized dead
code.
2013-01-26 Alan Modra <amodra@gmail.com>
* bfd.c (struct bfd_preserve, bfd_preserve_save, bfd_preserve_restore,

View File

@ -852,11 +852,7 @@ bfd_generic_archive_p (bfd *abfd)
first->target_defaulted = FALSE;
if (bfd_check_format (first, bfd_object)
&& first->xvec != abfd->xvec)
{
bfd_set_error (bfd_error_wrong_object_format);
bfd_ardata (abfd) = tdata_hold;
return NULL;
}
/* And we ought to close `first' here too. */
}
}

View File

@ -279,7 +279,6 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
for (target = bfd_target_vector; *target != NULL; target++)
{
const bfd_target *temp;
bfd_error_type err;
/* Don't check the default target twice. */
if (*target == &binary_vec
@ -310,16 +309,17 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
match_targ = temp;
if (preserve.marker != NULL)
bfd_preserve_finish (abfd, &preserve);
}
if (temp && (abfd->format != bfd_archive || bfd_has_map (abfd)))
if (abfd->format != bfd_archive
|| (bfd_has_map (abfd)
&& bfd_get_error () != bfd_error_wrong_object_format))
{
/* This format checks out as ok! */
right_targ = temp;
/* If this is the default target, accept it, even if other
targets might match. People who want those other targets
have to set the GNUTARGET variable. */
/* If this is the default target, accept it, even if
other targets might match. People who want those
other targets have to set the GNUTARGET variable. */
if (temp == bfd_default_vector[0])
goto ok_ret;
@ -334,23 +334,22 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
}
best_count++;
}
else if (temp
|| (err = bfd_get_error ()) == bfd_error_wrong_object_format
|| err == bfd_error_file_ambiguously_recognized)
else
{
/* An archive with no armap or objects of the wrong type,
or an ambiguous match. We want this target to match
if we get no better matches. */
/* An archive with no armap or objects of the wrong
type. We want this target to match if we get no
better matches. */
if (ar_right_targ != bfd_default_vector[0])
ar_right_targ = *target;
if (matching_vector)
matching_vector[ar_match_index] = *target;
ar_match_index++;
}
else if (err != bfd_error_wrong_format)
goto err_ret;
if (temp && !bfd_preserve_save (abfd, &preserve))
if (!bfd_preserve_save (abfd, &preserve))
goto err_ret;
}
else if (bfd_get_error () != bfd_error_wrong_format)
goto err_ret;
}