// Open a new, temporary file.
char *filename = strdup((stats_file + ".new.XXXXXX").c_str());
- fd = mkostemp(filename, O_WRONLY);
+ fd = mkostemp(filename, O_WRONLY | O_CLOEXEC);
if (fd == -1) {
log_perror(filename);
free(filename);
}
fp = fdopen(fd, "w");
- if (fp == NULL) {
+ if (fp == nullptr) {
log_perror("fdopen");
safe_close(fd);
if (unlink(filename) == -1) {
goto sleep;
}
- now = time(NULL);
+ now = time(nullptr);
for (size_t i = 0; i < inputs.size(); ++i) {
InputStats stats = inputs[i]->get_stats();
- fprintf(fp, "%s %llu %llu", stats.url.c_str(),
+ for (const char ch : stats.url) {
+ if (isspace(ch) || !isprint(ch)) {
+ putc('_', fp);
+ } else {
+ putc(ch, fp);
+ }
+ }
+ fprintf(fp, " %llu %llu",
(long long unsigned)(stats.bytes_received),
(long long unsigned)(stats.data_bytes_received));
if (stats.connect_time == -1) {