Commit 4664bafc authored by Ben Gamari's avatar Ben Gamari 🐢 Committed by Marge Bot

rts: Always truncate output files

Previously there were numerous places in the RTS where we would fopen
with the "w" flag string. This is wrong as it will not truncate the
file. Consequently if we write less data than the previous length of the
file we will leave garbage at its end.

Fixes #16993.
parent 0ecacb1e
......@@ -388,7 +388,7 @@ exitHpc(void) {
// not clober the .tix file.
if (hpc_pid == getpid()) {
FILE *f = __rts_fopen(tixFilename,"w");
FILE *f = __rts_fopen(tixFilename,"w+");
writeTix(f);
}
......
......@@ -385,7 +385,7 @@ initHeapProfiling(void)
sprintf(hp_filename, "%s.hp", prog);
/* open the log file */
if ((hp_file = __rts_fopen(hp_filename, "w")) == NULL) {
if ((hp_file = __rts_fopen(hp_filename, "w+")) == NULL) {
debugBelch("Can't open profiling report file %s\n",
hp_filename);
RtsFlags.ProfFlags.doHeapProfile = 0;
......
......@@ -263,7 +263,7 @@ initProfilingLogFile(void)
sprintf(prof_filename, "%s.prof", stem);
/* open the log file */
if ((prof_file = __rts_fopen(prof_filename, "w")) == NULL) {
if ((prof_file = __rts_fopen(prof_filename, "w+")) == NULL) {
debugBelch("Can't open profiling report file %s\n", prof_filename);
RtsFlags.CcFlags.doCostCentres = 0;
// Retainer profiling (`-hr` or `-hr<cc> -h<x>`) writes to
......
......@@ -1745,7 +1745,7 @@ openStatsFile (char *filename, // filename, or NULL
f = NULL; /* NULL means use debugBelch */
} else {
if (*filename != '\0') { /* stats file specified */
f = __rts_fopen (filename,"w");
f = __rts_fopen (filename,"w+");
} else {
if (filename_fmt == NULL) {
errorBelch("Invalid stats filename format (NULL)\n");
......@@ -1755,7 +1755,7 @@ openStatsFile (char *filename, // filename, or NULL
char stats_filename[STATS_FILENAME_MAXLEN];
snprintf(stats_filename, STATS_FILENAME_MAXLEN, filename_fmt,
prog_name);
f = __rts_fopen (stats_filename,"w");
f = __rts_fopen (stats_filename,"w+");
}
if (f == NULL) {
errorBelch("Can't open stats file %s\n", filename);
......
......@@ -82,7 +82,7 @@ initEventLogFileWriter(void)
char *event_log_filename = outputFileName();
/* Open event log file for writing. */
if ((event_log_file = __rts_fopen(event_log_filename, "wb")) == NULL) {
if ((event_log_file = __rts_fopen(event_log_filename, "wb+")) == NULL) {
sysErrorBelch(
"initEventLogFileWriter: can't open %s", event_log_filename);
stg_exit(EXIT_FAILURE);
......
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