diff options
author | Ian Lance Taylor <iant@golang.org> | 2014-09-18 17:27:26 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2014-09-18 17:27:26 -0700 |
commit | 14f5f7506edb404922490ad15b2e16e87f7d1fb7 (patch) | |
tree | 62fe745a1aa691759c3ff6f2b396776800edc8c0 /src/lib9/tempdir_windows.c | |
parent | 61e83efb7136c87ff2515a16ece5758b040ae1f9 (diff) | |
download | go-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/tempdir_windows.c')
-rw-r--r-- | src/lib9/tempdir_windows.c | 19 |
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); |