aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/objcopy.c16
2 files changed, 15 insertions, 5 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 4f16e4d..14b185c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,9 @@
Tue Jul 4 14:48:42 1995 Ian Lance Taylor <ian@cygnus.com>
+ * objcopy.c (copy_archive): Record all output BFD's, and close
+ them before unlinking them and removing the temporary directory,
+ to avoid NFS problems.
+
* ar.c (replace_members): In verbose messages, use 'r' when
replacing a member, and 'a' when adding one.
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index ba00c01..0ef9ceb 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -820,6 +820,7 @@ copy_archive (ibfd, obfd, output_target)
{
struct name_list *next;
char *name;
+ bfd *obfd;
} *list, *l;
bfd **ptr = &obfd->archive_head;
bfd *this_element;
@@ -867,6 +868,8 @@ copy_archive (ibfd, obfd, output_target)
/* Open the newly output file and attach to our list. */
output_bfd = bfd_openr (output_name, output_target);
+ l->obfd = output_bfd;
+
*ptr = output_bfd;
ptr = &output_bfd->next;
@@ -883,15 +886,18 @@ copy_archive (ibfd, obfd, output_target)
nonfatal (bfd_get_filename (obfd));
}
- /* Delete all the files that we opened. */
- for (l = list; l != NULL; l = l->next)
- unlink (l->name);
- rmdir (dir);
-
if (!bfd_close (ibfd))
{
nonfatal (bfd_get_filename (ibfd));
}
+
+ /* Delete all the files that we opened. */
+ for (l = list; l != NULL; l = l->next)
+ {
+ bfd_close (l->obfd);
+ unlink (l->name);
+ }
+ rmdir (dir);
}
/* The top-level control. */