aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-store-summary.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2002-09-11 05:39:56 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2002-09-11 05:39:56 +0800
commit75e84ec74f0eaf6ffd7d865478e170f084f2ff63 (patch)
treed9698160e23dc0ba86157301e67f77c458d43214 /camel/camel-store-summary.c
parentfbb7f7c202c6c4f8b435702ababe36463132292c (diff)
downloadgsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar.gz
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar.bz2
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar.lz
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar.xz
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.tar.zst
gsoc2013-evolution-75e84ec74f0eaf6ffd7d865478e170f084f2ff63.zip
Same as below. Also save errno before closing the file so our caller can
2002-09-10 Jeffrey Stedfast <fejj@ximian.com> * camel-store-summary.c (camel_store_summary_load): Same as below. Also save errno before closing the file so our caller can figure out why we failed. (camel_store_summary_save): Same here, but also flush the output stream to disk. * camel-folder-summary.c (camel_folder_summary_load): s/fclose(in) == -1/fclose(in) != 0/ since fclose doesn't necessarily return -1 on fail, all we really know is that it returns 0 on success and non-zero on fail. * camel-certdb.c (camel_certdb_save): fsync() the stream after we fflush it. svn path=/trunk/; revision=18037
Diffstat (limited to 'camel/camel-store-summary.c')
-rw-r--r--camel/camel-store-summary.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/camel/camel-store-summary.c b/camel/camel-store-summary.c
index b114ac78f4..fc839dfed7 100644
--- a/camel/camel-store-summary.c
+++ b/camel/camel-store-summary.c
@@ -362,7 +362,7 @@ camel_store_summary_load(CamelStoreSummary *s)
CAMEL_STORE_SUMMARY_UNLOCK(s, io_lock);
- if (fclose(in) == -1)
+ if (fclose (in) != 0)
return -1;
s->flags &= ~CAMEL_STORE_SUMMARY_DIRTY;
@@ -370,11 +370,13 @@ camel_store_summary_load(CamelStoreSummary *s)
return 0;
error:
+ i = ferror (in);
g_warning("Cannot load summary file: %s", strerror(ferror(in)));
CAMEL_STORE_SUMMARY_UNLOCK(s, io_lock);
fclose(in);
s->flags |= ~CAMEL_STORE_SUMMARY_DIRTY;
-
+ errno = i;
+
return -1;
}
@@ -412,8 +414,10 @@ camel_store_summary_save(CamelStoreSummary *s)
}
out = fdopen(fd, "w");
if ( out == NULL ) {
+ i = errno;
printf("** fdopen error: %s\n", strerror(errno));
close(fd);
+ errno = i;
return -1;
}
@@ -422,8 +426,10 @@ camel_store_summary_save(CamelStoreSummary *s)
CAMEL_STORE_SUMMARY_LOCK(s, io_lock);
if ( ((CamelStoreSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_save(s, out) == -1) {
+ i = errno;
fclose(out);
CAMEL_STORE_SUMMARY_UNLOCK(s, io_lock);
+ errno = i;
return -1;
}
@@ -438,8 +444,15 @@ camel_store_summary_save(CamelStoreSummary *s)
}
CAMEL_STORE_SUMMARY_UNLOCK(s, io_lock);
-
- if (fclose(out) == -1)
+
+ if (fflush (out) != 0 || fsync (fileno (out)) == -1) {
+ i = errno;
+ fclose (out);
+ errno = i;
+ return -1;
+ }
+
+ if (fclose (out) != 0)
return -1;
s->flags &= ~CAMEL_STORE_SUMMARY_DIRTY;