Commit 5a40b568 authored by Ian Lance Taylor's avatar Ian Lance Taylor

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 #8723.

LGTM=alex.brainman
R=golang-codereviews, alex.brainman
CC=golang-codereviews
https://golang.org/cl/141690043
parent 84f9c42b
......@@ -144,6 +144,10 @@ libinit(void)
void
errorexit(void)
{
if(cout >= 0) {
// For rmtemp run at atexit time on Windows.
close(cout);
}
if(nerrors) {
if(cout >= 0)
mayberemoveoutfile();
......
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment