diff --git a/gold/main.cc b/gold/main.cc index db3d1e4430..9c4c61dc12 100644 --- a/gold/main.cc +++ b/gold/main.cc @@ -98,11 +98,12 @@ write_debug_script(std::string filename_str, { size_t slash = filename_str.rfind('/'); if (slash != std::string::npos) - filename_str = filename_str.c_str() + slash + 1; - filename_str = std::string("/tmp/ld-run-") + filename_str + ".sh"; - const char* filename = filename_str.c_str(); - FILE* fp = fopen(filename, "w"); - if (fp) + filename_str.erase(0,slash+1); + filename_str = "/tmp/ld-run-" + filename_str + ".sh"; + const std::string filename_new = filename_str+"-new"; + FILE* fp = fopen(filename_new.c_str(), "w"); + fputs("Welcome to gold! ",stderr); + if (fp && !rename(filename_new.c_str(),filename_str.c_str()) ) { fprintf(fp, "[ \"$1\" = debug ]" " && PREFIX=\"${GDB-gdb} --annotate=3 --fullname %s --args\"" @@ -110,16 +111,15 @@ write_debug_script(std::string filename_str, argv_0); fprintf(fp, "$PREFIX%s $*\n", args); fclose(fp); - chmod(filename, 0755); + chmod(filename_str.c_str(), 0755); + fprintf(stderr,"Commandline written to %s.\n", filename_str.c_str()); } else - filename = "[none]"; - fprintf(stderr, "Welcome to gold! Commandline written to %s.\n", filename); + fputs("Failed to write debug script\n",stderr); fflush(stderr); } #else // !defined(DEBUG) - static inline std::string collect_argv(int, char**) {