Commit ece69f7c authored by Mike Andrews's avatar Mike Andrews Committed by Ian Lance Taylor

cmd/ld: don't delete output binary if not "ordinary" file.

e.g., don't delete /dev/null. this fix inspired by gnu libiberty,
unlink-if-ordinary.c.

Fixes #7563

LGTM=iant
R=golang-codereviews, iant, 0intro
CC=golang-codereviews, r
https://golang.org/cl/76810045
parent 2ca99505
......@@ -37,6 +37,9 @@
#include "../../pkg/runtime/funcdata.h"
#include <ar.h>
#if !(defined(_WIN32) || defined(PLAN9))
#include <sys/stat.h>
#endif
enum
{
......@@ -106,8 +109,13 @@ libinit(void)
// 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.
#ifndef _WIN32
remove(outfile);
// 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
cout = create(outfile, 1, 0775);
if(cout < 0) {
......
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