aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorDavid Henkel-Wallace <gumby@cygnus>1991-04-08 20:40:37 +0000
committerDavid Henkel-Wallace <gumby@cygnus>1991-04-08 20:40:37 +0000
commitad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d (patch)
treeae525f4638cc93a824e4387f9e6f46514b8a3bed /binutils
parent726cc6ef804d2a17dea43860ee1aca667f70703f (diff)
downloadgdb-ad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d.zip
gdb-ad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d.tar.gz
gdb-ad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d.tar.bz2
Fixed some bd in which temp files and directory were left around.
Dir itself has a short enough name to function under sysv.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/copy.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/binutils/copy.c b/binutils/copy.c
index 91b5f26..ff2dc09 100644
--- a/binutils/copy.c
+++ b/binutils/copy.c
@@ -148,18 +148,19 @@ bfd *obfd;
bfd *this_element;
/* Read each archive element in turn from the input, copy the
contents to a temp file, and keep the temp file handle */
- char *dir = cat("./",make_tempname(""),"copy-dir");
+ char *dir = cat("./#",make_tempname(""),"cd");
/* Make a temp directory to hold the contents */
mkdir(dir,0777);
obfd->has_armap = ibfd->has_armap;
this_element = bfd_openr_next_archived_file(ibfd, NULL);
+ ibfd->archive_head = this_element;
while (this_element != (bfd *)NULL) {
/* Create an output file for this member */
char *output_name = cat(dir, "/",this_element->filename);
bfd *output_bfd = bfd_openw(output_name, output_target);
-
+
if (!bfd_set_format(obfd, bfd_get_format(ibfd)))
bfd_fatal(output_filename);
@@ -178,7 +179,8 @@ bfd *obfd;
*ptr = output_bfd;
ptr =&( output_bfd->next);
- this_element = bfd_openr_next_archived_file(ibfd, this_element);
+ this_element->next = bfd_openr_next_archived_file(ibfd, this_element);
+ this_element = this_element->next;
}
*ptr = (bfd *)NULL;
@@ -186,17 +188,16 @@ bfd *obfd;
if (!bfd_close(obfd))
bfd_fatal(output_filename);
- /* Now delete all the files that we opened
- We can't use the names in the obfd list since they may have been
- trampled by the archive output code
- */
+ /* Now delete all the files that we opened.
+ Construct their names again, unfortunately, but so what;
+ we're about to exit anyway. */
for (this_element = ibfd->archive_head;
this_element != (bfd *)NULL;
this_element = this_element->next)
{
unlink(cat(dir,"/",this_element->filename));
}
- unlink(dir);
+ rmdir(dir);
if (!bfd_close(ibfd))
bfd_fatal(input_filename);