From 0ed9cdc345f9d92b063c6a8fa184f23cff73a547 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 27 Aug 2013 16:22:48 +0000 Subject: PR binutils/15796 * ar.c (map_over_members): Correctly handle multiple same-name entries on the command line and in the archive. --- binutils/ChangeLog | 6 ++++++ binutils/ar.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'binutils') diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 0805981ef8..5a4872cbd3 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2013-08-27 Nick Clifton + + PR binutils/15796 + * ar.c (map_over_members): Correctly handle multiple same-name + entries on the command line and in the archive. + 2013-08-23 H.J. Lu * doc/binutils.texi: Remove the extra space. diff --git a/binutils/ar.c b/binutils/ar.c index af5694dfa2..987b46cb0e 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -189,6 +189,9 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count) mapping over each file each time -- we want to hack multiple references. */ + for (head = arch->archive_next; head; head = head->archive_next) + head->archive_pass = 0; + for (; count > 0; files++, count--) { bfd_boolean found = FALSE; @@ -199,6 +202,14 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count) const char * filename; PROGRESS (1); + /* PR binutils/15796: Once an archive element has been matched + do not match it again. If the user provides multiple same-named + parameters on the command line their intent is to match multiple + same-named entries in the archive, not the same entry multiple + times. */ + if (head->archive_pass) + continue; + filename = head->filename; if (filename == NULL) { @@ -227,6 +238,13 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count) found = TRUE; function (head); + head->archive_pass = 1; + /* PR binutils/15796: Once a file has been matched, do not + match any more same-named files in the archive. If the + user does want to match multiple same-name files in an + archive they should provide multiple same-name parameters + to the ar command. */ + break; } } -- cgit v1.2.1