From: David Henkel-Wallace Date: Mon, 8 Apr 1991 20:40:37 +0000 (+0000) Subject: Fixed some bd in which temp files and directory were left around. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad19c0a2d1d72cbee89680aa95d94b35a2a8eb3d;p=binutils-gdb.git Fixed some bd in which temp files and directory were left around. Dir itself has a short enough name to function under sysv. --- diff --git a/binutils/copy.c b/binutils/copy.c index 91b5f26a220..ff2dc091121 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);