aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--ChangeLog.ja5
-rw-r--r--libsylph/prefs.c10
3 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 02d7280b..df91aa77 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2008-03-17
+ * libsylph/prefs.c: prefs_file_close(): abort if fsync() fails.
+
+2008-03-17
+
* libsylph/prefs.c
configure.in: prefs_file_close(): do fflush() and fsync() before
fclose() to lessen the possibility of data loss.
diff --git a/ChangeLog.ja b/ChangeLog.ja
index f439ea64..32cc7d3a 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,5 +1,10 @@
2008-03-17
+ * libsylph/prefs.c: prefs_file_close(): fsync() が失敗したら処理を
+ 中断するようにした。
+
+2008-03-17
+
* libsylph/prefs.c
configure.in: prefs_file_close(): fclose() の前に fflush() と
fsync() を行うようにした(データロスの可能性を減らすため)。
diff --git a/libsylph/prefs.c b/libsylph/prefs.c
index 07078d52..56a2eda6 100644
--- a/libsylph/prefs.c
+++ b/libsylph/prefs.c
@@ -397,8 +397,14 @@ gint prefs_file_close(PrefFile *pfile)
goto finish;
}
#if HAVE_FSYNC
- if ((fd = fileno(fp)) >= 0)
- fsync(fd);
+ if ((fd = fileno(fp)) >= 0) {
+ if (fsync(fd) < 0) {
+ FILE_OP_ERROR(tmppath, "fsync");
+ fclose(fp);
+ ret = -1;
+ goto finish;
+ }
+ }
#endif
if (fclose(fp) == EOF) {
FILE_OP_ERROR(tmppath, "fclose");