1
0
mirror of https://github.com/golang/go synced 2024-11-11 21:40:21 -07:00

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
This commit is contained in:
Ian Lance Taylor 2014-09-18 17:27:26 -07:00
parent 84f9c42bbb
commit 5a40b568d0
2 changed files with 15 additions and 8 deletions

View File

@ -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();

View File

@ -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);