diff --git a/logging.c b/logging.c index c3634274..41c5b257 100644 --- a/logging.c +++ b/logging.c @@ -164,7 +164,6 @@ void logfopen(void *handle) { struct LogContext *ctx = (struct LogContext *)handle; struct tm tm; - FILE *fp; int mode; /* Prevent repeat calls */ @@ -184,10 +183,8 @@ void logfopen(void *handle) conf_get_str(ctx->conf, CONF_host), conf_get_int(ctx->conf, CONF_port), &tm); - fp = f_open(ctx->currlogfilename, "r", FALSE); /* file already present? */ - if (fp) { + if (open_for_write_would_lose_data(ctx->currlogfilename)) { int logxfovr = conf_get_int(ctx->conf, CONF_logxfovr); - fclose(fp); if (logxfovr != LGXF_ASK) { mode = ((logxfovr == LGXF_OVR) ? 2 : 1); } else diff --git a/putty.h b/putty.h index 4c64cb85..76ab6fb7 100644 --- a/putty.h +++ b/putty.h @@ -1467,6 +1467,7 @@ Filename *filename_deserialise(void *data, int maxsize, int *used); char *get_username(void); /* return value needs freeing */ char *get_random_data(int bytes, const char *device); /* used in cmdgen.c */ char filename_char_sanitise(char c); /* rewrite special pathname chars */ +int open_for_write_would_lose_data(const Filename *fn); /* * Exports and imports from timing.c. diff --git a/unix/uxmisc.c b/unix/uxmisc.c index daa61a01..50d385b6 100644 --- a/unix/uxmisc.c +++ b/unix/uxmisc.c @@ -349,3 +349,14 @@ char *make_dir_path(const char *path, mode_t mode) pos += strspn(path + pos, "/"); } } + +int open_for_write_would_lose_data(const Filename *fn) +{ + FILE *fp; + if ((fp = f_open(fn, "r", FALSE)) != NULL) { + fclose(fp); + return TRUE; + } else { + return FALSE; + } +} diff --git a/windows/winmisc.c b/windows/winmisc.c index fca8af01..75a95c6a 100644 --- a/windows/winmisc.c +++ b/windows/winmisc.c @@ -587,3 +587,14 @@ FontSpec *fontspec_deserialise(void *vdata, int maxsize, int *used) GET_32BIT_MSB_FIRST(end + 4), GET_32BIT_MSB_FIRST(end + 8)); } + +int open_for_write_would_lose_data(const Filename *fn) +{ + FILE *fp; + if ((fp = f_open(fn, "r", FALSE)) != NULL) { + fclose(fp); + return TRUE; + } else { + return FALSE; + } +}