From 925d7119ec0db3620a2350eca3cbaea1a8eb4306 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 21 Jan 2014 18:18:04 +0100 Subject: [PATCH] Fix writing of drift and RTC files Without sequence points the driftfile and RTC file could be closed before new values were written. --- reference.c | 6 ++++-- rtc_linux.c | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/reference.c b/reference.c index 12e6beb..3a3af1e 100644 --- a/reference.c +++ b/reference.c @@ -290,6 +290,7 @@ update_drift_file(double freq_ppm, double skew) struct stat buf; char *temp_drift_file; FILE *out; + int r1, r2; /* Create a temporary file with a '.tmp' extension. */ @@ -311,8 +312,9 @@ update_drift_file(double freq_ppm, double skew) } /* Write the frequency and skew parameters in ppm */ - if ((fprintf(out, "%20.6f %20.6f\n", freq_ppm, 1.0e6 * skew) < 0) | - fclose(out)) { + r1 = fprintf(out, "%20.6f %20.6f\n", freq_ppm, 1.0e6 * skew); + r2 = fclose(out); + if (r1 < 0 || r2) { Free(temp_drift_file); LOG(LOGS_WARN, LOGF_Reference, "Could not write to temporary driftfile %s.tmp", drift_file); diff --git a/rtc_linux.c b/rtc_linux.c index 8eda906..91b0cac 100644 --- a/rtc_linux.c +++ b/rtc_linux.c @@ -467,6 +467,7 @@ write_coefs_to_file(int valid,time_t ref_time,double offset,double rate) struct stat buf; char *temp_coefs_file_name; FILE *out; + int r1, r2; /* Create a temporary file with a '.tmp' extension. */ @@ -488,9 +489,10 @@ write_coefs_to_file(int valid,time_t ref_time,double offset,double rate) } /* Gain rate is written out in ppm */ - if ((fprintf(out, "%1d %ld %.6f %.3f\n", - valid,ref_time, offset, 1.0e6 * rate) < 0) | - fclose(out)) { + r1 = fprintf(out, "%1d %ld %.6f %.3f\n", + valid, ref_time, offset, 1.0e6 * rate); + r2 = fclose(out); + if (r1 < 0 || r2) { Free(temp_coefs_file_name); LOG(LOGS_WARN, LOGF_RtcLinux, "Could not write to temporary RTC file %s.tmp", coefs_file_name);