summaryrefslogtreecommitdiff
path: root/src/lib9
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2014-09-18 17:27:26 -0700
committerIan Lance Taylor <iant@golang.org>2014-09-18 17:27:26 -0700
commit14f5f7506edb404922490ad15b2e16e87f7d1fb7 (patch)
tree62fe745a1aa691759c3ff6f2b396776800edc8c0 /src/lib9
parent61e83efb7136c87ff2515a16ece5758b040ae1f9 (diff)
downloadgo-14f5f7506edb404922490ad15b2e16e87f7d1fb7.tar.gz
lib9, cmd/ld: fixes for cross-linking on a Windows host
This fixes a couple of problems that occur when the linker removes its temporary directory on Windows. The linker only creates and removes a temporary directory when doing external linking. Windows does not yet support external linking. Therefore, these problems are only seen when using a cross-compiler hosted on Windows. In lib9, FindFirstFileW returns just the file name, not the full path name. Don't assume that we will find a slash. Changed the code to work either way just in case. In ld, Windows requires that files be closed before they are removed, so close the output file before we might try to remove it. Fixes issue 8723. LGTM=alex.brainman R=golang-codereviews, alex.brainman CC=golang-codereviews https://codereview.appspot.com/141690043
Diffstat (limited to 'src/lib9')
-rw-r--r--src/lib9/tempdir_windows.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/lib9/tempdir_windows.c b/src/lib9/tempdir_windows.c
index 1a530059a..4c3df7cf1 100644
--- a/src/lib9/tempdir_windows.c
+++ b/src/lib9/tempdir_windows.c
@@ -70,7 +70,7 @@ removeall(char *p)
{
WinRune *r, *r1;
DWORD attr;
- char *q, *elem;
+ char *q, *qt, *elem;
HANDLE h;
WIN32_FIND_DATAW data;
@@ -91,15 +91,18 @@ removeall(char *p)
do{
q = toutf(data.cFileName);
elem = strrchr(q, '\\');
- if(elem != nil) {
+ if(elem != nil)
elem++;
- if(strcmp(elem, ".") == 0 || strcmp(elem, "..") == 0) {
- free(q);
- continue;
- }
+ else
+ elem = q;
+ if(strcmp(elem, ".") == 0 || strcmp(elem, "..") == 0) {
+ free(q);
+ continue;
}
- removeall(q);
- free(q);
+ qt = smprint("%s\\%s", p, q);
+ free(q);
+ removeall(qt);
+ free(qt);
}while(FindNextFileW(h, &data));
FindClose(h);