diff options
author | David Henkel-Wallace <gumby@cygnus> | 1991-04-08 20:40:37 +0000 |
---|---|---|
committer | David Henkel-Wallace <gumby@cygnus> | 1991-04-08 20:40:37 +0000 |
commit | ad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d (patch) | |
tree | ae525f4638cc93a824e4387f9e6f46514b8a3bed /binutils | |
parent | 726cc6ef804d2a17dea43860ee1aca667f70703f (diff) | |
download | gdb-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.c | 17 |
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); |