mirror of
https://github.com/golang/go
synced 2024-11-12 09:50:21 -07:00
cmd/ld: don't delete output binary if not "ordinary" file (redux).
following on CL https://golang.org/cl/76810045 and issue 7563, i now see there's another "remove(outfile)" a few dozen lines down that also needs fixing. LGTM=iant R=golang-codereviews, iant CC=0intro, golang-codereviews, r https://golang.org/cl/89030043
This commit is contained in:
parent
75b74ea8ff
commit
7c7aaa4156
@ -83,6 +83,23 @@ Lflag(char *arg)
|
||||
ctxt->libdir[ctxt->nlibdir++] = arg;
|
||||
}
|
||||
|
||||
/*
|
||||
* Unix doesn't like it when we write to a running (or, sometimes,
|
||||
* recently run) binary, so remove the output file before writing it.
|
||||
* On Windows 7, remove() can force a subsequent create() to fail.
|
||||
* S_ISREG() does not exist on Plan 9.
|
||||
*/
|
||||
static void
|
||||
mayberemoveoutfile(void)
|
||||
{
|
||||
#if !(defined(_WIN32) || defined(PLAN9))
|
||||
struct stat st;
|
||||
if(lstat(outfile, &st) == 0 && !S_ISREG(st.st_mode))
|
||||
return;
|
||||
#endif
|
||||
remove(outfile);
|
||||
}
|
||||
|
||||
void
|
||||
libinit(void)
|
||||
{
|
||||
@ -106,17 +123,7 @@ libinit(void)
|
||||
}
|
||||
Lflag(smprint("%s/pkg/%s_%s%s%s", goroot, goos, goarch, suffixsep, suffix));
|
||||
|
||||
// Unix doesn't like it when we write to a running (or, sometimes,
|
||||
// recently run) binary, so remove the output file before writing it.
|
||||
// On Windows 7, remove() can force the following create() to fail.
|
||||
// S_ISREG() does not exist on Plan 9.
|
||||
#if !(defined(_WIN32) || defined(PLAN9))
|
||||
{
|
||||
struct stat st;
|
||||
if(lstat(outfile, &st) == 0 && S_ISREG(st.st_mode))
|
||||
remove(outfile);
|
||||
}
|
||||
#endif
|
||||
mayberemoveoutfile();
|
||||
cout = create(outfile, 1, 0775);
|
||||
if(cout < 0) {
|
||||
diag("cannot create %s: %r", outfile);
|
||||
@ -139,7 +146,7 @@ errorexit(void)
|
||||
{
|
||||
if(nerrors) {
|
||||
if(cout >= 0)
|
||||
remove(outfile);
|
||||
mayberemoveoutfile();
|
||||
exits("error");
|
||||
}
|
||||
exits(0);
|
||||
|
Loading…
Reference in New Issue
Block a user