[Commits] [SCM] claws branch, master, updated. 3.17.0-81-g618839a
Colin
colin at claws-mail.org
Fri Oct 5 23:02:43 CEST 2018
The branch, master has been updated
via 618839aae3e97e0869fcc2c9b2b25f86995877b0 (commit)
from c01f3c5b9042dd0cdd2abc35b6e6b084fa22c51f (commit)
Summary of changes:
src/Makefile.am | 2 ++
src/addrbook.c | 3 +-
src/addrindex.c | 3 +-
src/common/Makefile.am | 1 +
src/common/log.c | 3 +-
src/common/prefs.c | 13 ++------
src/common/ssl_certificate.c | 5 +--
src/common/tags.c | 3 +-
src/common/template.c | 3 +-
src/common/utils.c | 14 ++++----
src/compose.c | 8 +++--
src/etpan/imap-thread.c | 3 +-
src/exporthtml.c | 7 ++--
src/exportldif.c | 3 +-
src/ldapquery.c | 3 +-
src/main.c | 3 +-
src/mbox.c | 13 ++++----
src/messageview.c | 4 ++-
src/mh.c | 7 ++--
src/msgcache.c | 22 +++----------
src/news.c | 5 +--
src/partial_download.c | 5 +--
src/plugins/acpi_notifier/acpi_notifier.c | 3 +-
src/plugins/bogofilter/bogofilter.c | 3 +-
src/plugins/fancy/claws.def | 1 +
src/plugins/fancy/fancy_viewer.c | 3 +-
src/plugins/libravatar/claws.def | 1 +
src/plugins/libravatar/libravatar_image.c | 3 +-
src/plugins/libravatar/libravatar_missing.c | 3 +-
src/plugins/mailmbox/claws.def | 1 +
src/plugins/mailmbox/mailmbox_folder.c | 5 +--
src/plugins/pgpinline/claws.def | 1 +
src/plugins/pgpinline/pgpinline.c | 3 +-
src/plugins/pgpmime/claws.def | 1 +
src/plugins/pgpmime/pgpmime.c | 3 +-
src/plugins/rssyl/claws.def | 1 +
src/plugins/rssyl/opml_export.c | 3 +-
src/plugins/rssyl/rssyl_add_item.c | 3 +-
src/plugins/rssyl/rssyl_deleted.c | 3 +-
src/plugins/smime/claws.def | 1 +
src/plugins/smime/smime.c | 7 ++--
src/plugins/vcalendar/claws.def | 1 +
src/plugins/vcalendar/vcal_meeting_gtk.c | 3 +-
src/pop.c | 5 +--
src/prefs_common.c | 6 ++--
src/procmsg.c | 9 +++---
src/{plugins/pgpcore/pgp_utils.h => safe_fclose.c} | 34 +++++++++++++-------
src/{gtk/foldersort.h => safe_fclose.h} | 11 +++----
48 files changed, 142 insertions(+), 109 deletions(-)
copy src/{plugins/pgpcore/pgp_utils.h => safe_fclose.c} (65%)
copy src/{gtk/foldersort.h => safe_fclose.h} (82%)
- Log -----------------------------------------------------------------
commit 618839aae3e97e0869fcc2c9b2b25f86995877b0
Author: Colin Leroy <colin at colino.net>
Date: Fri Oct 5 23:01:46 2018 +0200
Implement safe_fclose() so we can respect the "Metadata handling"
preference for every data file we write into.
diff --git a/src/Makefile.am b/src/Makefile.am
index 9844f30..b19eccd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -228,6 +228,7 @@ claws_mail_SOURCES = \
quote_fmt_parse.y \
recv.c \
remotefolder.c \
+ safe_fclose.c \
send_message.c \
setup.c \
sourcewindow.c \
@@ -348,6 +349,7 @@ claws_mailinclude_HEADERS = \
quote_fmt_parse.h \
recv.h \
remotefolder.h \
+ safe_fclose.h \
send_message.h \
setup.h \
sourcewindow.h \
diff --git a/src/addrbook.c b/src/addrbook.c
index 274d4ac..c519eb7 100644
--- a/src/addrbook.c
+++ b/src/addrbook.c
@@ -33,6 +33,7 @@
#include "addrcache.h"
#include "addrbook.h"
#include "adbookbase.h"
+#include "safe_fclose.h"
#ifndef DEV_STANDALONE
#include "prefs_gtk.h"
@@ -1318,7 +1319,7 @@ static gint addrbook_write_to(AddressBookFile *book, gchar *newFile)
book->retVal = MGU_SUCCESS;
#ifdef DEV_STANDALONE
- fclose(fp);
+ safe_fclose(fp);
#else
if (prefs_file_close( pfile ) < 0)
book->retVal = MGU_ERROR_WRITE;
diff --git a/src/addrindex.c b/src/addrindex.c
index 8012996..fda0bcd 100644
--- a/src/addrindex.c
+++ b/src/addrindex.c
@@ -43,6 +43,7 @@
#include "utils.h"
#include "alertpanel.h"
#include "passwordstore.h"
+#include "safe_fclose.h"
#ifndef DEV_STANDALONE
#include "prefs_gtk.h"
@@ -1782,7 +1783,7 @@ static gint addrindex_write_to( AddressIndex *addrIndex, const gchar *newFile )
addrIndex->retVal = MGU_SUCCESS;
#ifdef DEV_STANDALONE
- fclose( fp );
+ safe_fclose( fp );
#else
if( prefs_file_close( pfile ) < 0 ) {
addrIndex->retVal = MGU_ERROR_WRITE;
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 5c4f249..d1fd799 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -87,6 +87,7 @@ clawscommoninclude_HEADERS = $(arch_headers) \
unmime.h
AM_CPPFLAGS = \
+ -I$(srcdir)/.. \
-I$(top_srcdir)/intl \
$(GLIB_CFLAGS) \
$(VALGRIND_CFLAGS) \
diff --git a/src/common/log.c b/src/common/log.c
index 286b836..1003d51 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -35,6 +35,7 @@
#include "utils.h"
#include "log.h"
#include "hooks.h"
+#include "safe_fclose.h"
#define FWRITE(_b,_s,_n,_f) if (fwrite(_b,_s,_n,_f) != _n) { \
g_message("log fwrite failed!\n"); \
@@ -136,7 +137,7 @@ void set_log_file(LogInstance instance, const gchar *filename)
void close_log_file(LogInstance instance)
{
if (log_fp[instance]) {
- fclose(log_fp[instance]);
+ safe_fclose(log_fp[instance]);
log_fp[instance] = NULL;
log_size[instance] = 0;
g_free(log_filename[instance]);
diff --git a/src/common/prefs.c b/src/common/prefs.c
index 23bcc22..362cbb9 100644
--- a/src/common/prefs.c
+++ b/src/common/prefs.c
@@ -28,6 +28,7 @@
#include "prefs.h"
#include "utils.h"
+#include "safe_fclose.h"
static gboolean prefs_is_readonly (const gchar *path);
@@ -159,17 +160,7 @@ gint prefs_file_close(PrefFile *pfile)
tmppath = g_strconcat(path, ".tmp", NULL);
-
- if (prefs_common_get_flush_metadata() && fsync(fileno(fp)) < 0) {
- FILE_OP_ERROR(tmppath, "fsync");
- fclose(fp);
- claws_unlink(tmppath);
- g_free(path);
- g_free(tmppath);
- return -1;
- }
-
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmppath, "fclose");
claws_unlink(tmppath);
g_free(path);
diff --git a/src/common/ssl_certificate.c b/src/common/ssl_certificate.c
index 75b61e6..1f71662 100644
--- a/src/common/ssl_certificate.c
+++ b/src/common/ssl_certificate.c
@@ -46,6 +46,7 @@
#include "socket.h"
#include "hooks.h"
#include "defs.h"
+#include "safe_fclose.h"
static GHashTable *warned_expired = NULL;
@@ -376,7 +377,7 @@ static void ssl_certificate_save (SSLCertificate *cert)
gnutls_export_X509_fp(fp, cert->x509_cert, GNUTLS_X509_FMT_DER);
g_free(file);
- fclose(fp);
+ safe_fclose(fp);
}
@@ -682,7 +683,7 @@ static void ssl_certificate_save_chain(gnutls_x509_crt_t *certs, gint len, const
}
if (fp)
- fclose(fp);
+ safe_fclose(fp);
}
gboolean ssl_certificate_check (gnutls_x509_crt_t x509_cert, guint status,
diff --git a/src/common/tags.c b/src/common/tags.c
index e68ee64..e0f020a 100644
--- a/src/common/tags.c
+++ b/src/common/tags.c
@@ -40,6 +40,7 @@
#include "defs.h"
#include "utils.h"
#include "tags.h"
+#include "safe_fclose.h"
static GHashTable *tags_table = NULL;
static GHashTable *tags_reverse_table = NULL;
@@ -146,7 +147,7 @@ void tags_write_tags(void)
return;
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(file, "fclose");
g_free(file);
g_free(file_new);
diff --git a/src/common/template.c b/src/common/template.c
index 9d53d88..dfd9603 100644
--- a/src/common/template.c
+++ b/src/common/template.c
@@ -29,6 +29,7 @@
#include "utils.h"
#include "template.h"
#include "codeconv.h"
+#include "safe_fclose.h"
static GSList *template_list;
@@ -283,7 +284,7 @@ static void template_write_config(GSList *tmpl_list)
} else {
TRY(fwrite("", sizeof(gchar), 1, fp) == 1);
}
- TRY_NO_CLOSE(fclose(fp) != EOF);
+ TRY_NO_CLOSE(safe_fclose(fp) != EOF);
if (new) {
if (rename_force(new, filename) < 0) {
diff --git a/src/common/utils.c b/src/common/utils.c
index 3833545..e3ba80c 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -85,6 +85,8 @@
#include "socket.h"
#include "codeconv.h"
#include "tlds.h"
+#include "timing.h"
+#include "safe_fclose.h"
#define BUFFSIZE 8192
@@ -340,7 +342,7 @@ gint file_strip_crs(const gchar *file)
}
fclose(fp);
- if (fclose(outfp) == EOF) {
+ if (safe_fclose(outfp) == EOF) {
goto unlinkout;
}
@@ -2523,7 +2525,7 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup)
err = TRUE;
}
fclose(src_fp);
- if (fclose(dest_fp) == EOF) {
+ if (safe_fclose(dest_fp) == EOF) {
FILE_OP_ERROR(dest, "fclose");
err = TRUE;
}
@@ -2619,7 +2621,7 @@ gint copy_file_part(FILE *fp, off_t offset, size_t length, const gchar *dest)
if (copy_file_part_to_fp(fp, offset, length, dest_fp) < 0)
err = TRUE;
- if (fclose(dest_fp) == EOF) {
+ if (safe_fclose(dest_fp) == EOF) {
FILE_OP_ERROR(dest, "fclose");
err = TRUE;
}
@@ -2737,7 +2739,7 @@ gint canonicalize_file(const gchar *src, const gchar *dest)
err = TRUE;
}
fclose(src_fp);
- if (fclose(dest_fp) == EOF) {
+ if (safe_fclose(dest_fp) == EOF) {
FILE_OP_ERROR(dest, "fclose");
err = TRUE;
}
@@ -2997,7 +2999,7 @@ gint str_write_to_file(const gchar *str, const gchar *file)
return -1;
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(file, "fclose");
claws_unlink(file);
return -1;
@@ -4580,7 +4582,7 @@ void mailcap_update_default(const gchar *type, const gchar *command)
if (fp)
fclose(fp);
- if (fclose(outfp) == EOF)
+ if (safe_fclose(outfp) == EOF)
err = TRUE;
if (!err)
diff --git a/src/compose.c b/src/compose.c
index 1aa2dc4..6f17c98 100644
--- a/src/compose.c
+++ b/src/compose.c
@@ -107,6 +107,8 @@
#include "autofaces.h"
#include "spell_entry.h"
#include "headers.h"
+#include "safe_fclose.h"
+
#ifdef USE_LDAP
#include "password.h"
#include "ldapserver.h"
@@ -5983,7 +5985,7 @@ static gint compose_write_body_to_file(Compose *compose, const gchar *file)
g_free(chars);
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(file, "fclose");
claws_unlink(file);
return -1;
@@ -6276,7 +6278,7 @@ static ComposeQueueResult compose_queue_sub(Compose *compose, gint *msgnum, Fold
g_free(tmp);
return COMPOSE_QUEUE_ERROR_WITH_ERRNO;
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmp, "fclose");
claws_unlink(tmp);
g_free(tmp);
@@ -10379,7 +10381,7 @@ gboolean compose_draft (gpointer data, guint action)
fclose(fp);
goto warn_err;
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
goto warn_err;
}
diff --git a/src/etpan/imap-thread.c b/src/etpan/imap-thread.c
index 80279d2..29d0380 100644
--- a/src/etpan/imap-thread.c
+++ b/src/etpan/imap-thread.c
@@ -44,6 +44,7 @@
#include "utils.h"
#include "mainwindow.h"
#include "proxy.h"
+#include "safe_fclose.h"
#include "ssl.h"
#include "ssl_certificate.h"
#include "socket.h"
@@ -2637,7 +2638,7 @@ static void fetch_content_run(struct etpan_thread_op * op)
goto fclose;
}
- r = fclose(f);
+ r = safe_fclose(f);
if (r == EOF) {
result->error = MAILIMAP_ERROR_FETCH;
goto unlink;
diff --git a/src/exporthtml.c b/src/exporthtml.c
index 675576f..7ed6fc8 100644
--- a/src/exporthtml.c
+++ b/src/exporthtml.c
@@ -46,6 +46,7 @@
#include "utils.h"
#include "exporthtml.h"
#include "xmlprops.h"
+#include "safe_fclose.h"
#ifdef MKDIR_TAKES_ONE_ARG
#undef mkdir
@@ -301,7 +302,7 @@ static gint exporthtml_create_css_dfl( const gchar *fileSpec ) {
fprintf( cssFile, ".tab-attr {\n" );
fprintf( cssFile, "}\n" );
- fclose( cssFile );
+ safe_fclose( cssFile );
return MGU_SUCCESS;
}
@@ -365,7 +366,7 @@ static gint exporthtml_create_css_full( const gchar *fileSpec ) {
fprintf( cssFile, ".tab-attr {\n" );
fprintf( cssFile, "}\n" );
- fclose( cssFile );
+ safe_fclose( cssFile );
return MGU_SUCCESS;
}
@@ -994,7 +995,7 @@ void exporthtml_process(
fprintf( htmlFile, "</body>\n" );
fprintf( htmlFile, "</html>\n" );
- fclose( htmlFile );
+ safe_fclose( htmlFile );
ctl->retVal = MGU_SUCCESS;
/* Create stylesheet files */
diff --git a/src/exportldif.c b/src/exportldif.c
index d9c1b49..eba8737 100644
--- a/src/exportldif.c
+++ b/src/exportldif.c
@@ -38,6 +38,7 @@
#include "exportldif.h"
#include "xmlprops.h"
#include "ldif.h"
+#include "safe_fclose.h"
#ifdef MKDIR_TAKES_ONE_ARG
@@ -541,7 +542,7 @@ void exportldif_process( ExportLdifCtl *ctl, AddressCache *cache )
rootFolder = cache->rootFolder;
exportldif_fmt_folder( ctl, ldifFile, rootFolder );
- fclose( ldifFile );
+ safe_fclose( ldifFile );
ctl->retVal = MGU_SUCCESS;
}
diff --git a/src/ldapquery.c b/src/ldapquery.c
index b132989..257ae19 100644
--- a/src/ldapquery.c
+++ b/src/ldapquery.c
@@ -38,6 +38,7 @@
#include "ldapctrl.h"
#include "ldapserver.h"
#include "mgutils.h"
+#include "safe_fclose.h"
#include "addritem.h"
#include "addrcache.h"
@@ -426,7 +427,7 @@ static GSList *ldapqry_add_single_value( LDAP *ld, LDAPMessage *entry, char *att
FILE *fp = g_fopen(file, "wb");
if (fp) {
fwrite(vals[0]->bv_val, 1, vals[0]->bv_len, fp);
- fclose(fp);
+ safe_fclose(fp);
}
list = g_slist_append( list, file);
}
diff --git a/src/main.c b/src/main.c
index 398dadd..8a0ce23 100644
--- a/src/main.c
+++ b/src/main.c
@@ -132,6 +132,7 @@
#include "advsearch.h"
#include "avatars.h"
#include "passwordstore.h"
+#include "safe_fclose.h"
#ifdef HAVE_LIBETPAN
#include "imap-thread.h"
@@ -477,7 +478,7 @@ static int migrate_common_rc(const gchar *old_rc, const gchar *new_rc)
g_free(new_plugin_path);
g_free(old_plugin_path);
fclose(oldfp);
- if (fclose(newfp) == EOF)
+ if (safe_fclose(newfp) == EOF)
err = TRUE;
return (err ? -1:0);
diff --git a/src/mbox.c b/src/mbox.c
index 9929a29..ea1138a 100644
--- a/src/mbox.c
+++ b/src/mbox.c
@@ -56,6 +56,7 @@
#include "filtering.h"
#include "alertpanel.h"
#include "statusbar.h"
+#include "safe_fclose.h"
#define MESSAGEBUFSIZE 8192
@@ -230,7 +231,7 @@ gint proc_mbox(FolderItem *dest, const gchar *mbox, gboolean apply_filter,
return -1;
}
- if (fclose(tmp_fp) == EOF) {
+ if (safe_fclose(tmp_fp) == EOF) {
FILE_OP_ERROR(tmp_file, "fclose");
g_warning("can't write to temporary file");
fclose(mbox_fp);
@@ -333,7 +334,7 @@ gint lock_mbox(const gchar *base, LockType type)
return -1;
}
- if (fclose(lockfp) == EOF) {
+ if (safe_fclose(lockfp) == EOF) {
FILE_OP_ERROR(lockfile, "fclose");
g_free(lockfile);
return -1;
@@ -509,7 +510,7 @@ gint copy_mbox(gint srcfd, const gchar *dest)
err = TRUE;
}
- if (fclose(dest_fp) == EOF) {
+ if (safe_fclose(dest_fp) == EOF) {
FILE_OP_ERROR(dest, "fclose");
err = TRUE;
}
@@ -531,7 +532,7 @@ void empty_mbox(const gchar *mbox)
g_warning("can't truncate mailbox to zero.");
return;
}
- fclose(fp);
+ safe_fclose(fp);
}
gint export_list_to_mbox(GSList *mlist, const gchar *mbox)
@@ -657,7 +658,7 @@ gint export_list_to_mbox(GSList *mlist, const gchar *mbox)
#ifdef HAVE_FGETS_UNLOCKED
funlockfile(msg_fp);
#endif
- fclose(msg_fp);
+ safe_fclose(msg_fp);
statusbar_progress_all(msgs++,total, 500);
if (msgs%500 == 0)
GTK_EVENTS_FLUSH();
@@ -670,7 +671,7 @@ out:
#ifdef HAVE_FGETS_UNLOCKED
funlockfile(mbox_fp);
#endif
- fclose(mbox_fp);
+ safe_fclose(mbox_fp);
return err;
}
diff --git a/src/messageview.c b/src/messageview.c
index 6a73c63..1e3d048 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -67,6 +67,8 @@
#include "statusbar.h"
#include "folder_item_prefs.h"
#include "avatars.h"
+#include "safe_fclose.h"
+
#ifndef USE_ALT_ADDRBOOK
#include "addressbook.h"
#else
@@ -1060,7 +1062,7 @@ static gint disposition_notification_send(MsgInfo *msginfo)
if (ok < 0)
goto FILE_ERROR;
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmp, "fclose");
claws_unlink(tmp);
return -1;
diff --git a/src/mh.c b/src/mh.c
index 0bf0783..713ce0d 100644
--- a/src/mh.c
+++ b/src/mh.c
@@ -44,6 +44,7 @@
#include "gtkutils.h"
#include "timing.h"
#include "msgcache.h"
+#include "safe_fclose.h"
/* Define possible missing constants for Windows. */
#ifdef G_OS_WIN32
@@ -1421,11 +1422,7 @@ static void mh_write_sequences(FolderItem *item, gboolean remove_unseen)
fclose(mh_sequences_old_fp);
}
- fflush(mh_sequences_new_fp);
-#if 0
- fsync(fileno(mh_sequences_new_fp));
-#endif
- if (fclose(mh_sequences_new_fp) == EOF)
+ if (safe_fclose(mh_sequences_new_fp) == EOF)
err = TRUE;
if (!err) {
diff --git a/src/msgcache.c b/src/msgcache.c
index edaa092..871c04a 100644
--- a/src/msgcache.c
+++ b/src/msgcache.c
@@ -47,6 +47,7 @@
#include "timing.h"
#include "tags.h"
#include "prefs_common.h"
+#include "safe_fclose.h"
#ifdef HAVE_FWRITE_UNLOCKED
#define SC_FWRITE fwrite_unlocked
@@ -1219,29 +1220,14 @@ gint msgcache_write(const gchar *cache_file, const gchar *mark_file, const gchar
if (write_fps.tags_fp)
funlockfile(write_fps.tags_fp);
#endif
- /* flush buffers */
- if (write_fps.cache_fp)
- write_fps.error |= (fflush(write_fps.cache_fp) != 0);
- if (write_fps.mark_fp)
- write_fps.error |= (fflush(write_fps.mark_fp) != 0);
- if (write_fps.tags_fp)
- write_fps.error |= (fflush(write_fps.tags_fp) != 0);
-
- /* sync to filesystem */
- if (prefs_common.flush_metadata && write_fps.cache_fp)
- write_fps.error |= (fsync(fileno(write_fps.cache_fp)) != 0);
- if (prefs_common.flush_metadata && write_fps.mark_fp)
- write_fps.error |= (fsync(fileno(write_fps.mark_fp)) != 0);
- if (prefs_common.flush_metadata && write_fps.tags_fp)
- write_fps.error |= (fsync(fileno(write_fps.tags_fp)) != 0);
/* close files */
if (write_fps.cache_fp)
- write_fps.error |= (fclose(write_fps.cache_fp) != 0);
+ write_fps.error |= (safe_fclose(write_fps.cache_fp) != 0);
if (write_fps.mark_fp)
- write_fps.error |= (fclose(write_fps.mark_fp) != 0);
+ write_fps.error |= (safe_fclose(write_fps.mark_fp) != 0);
if (write_fps.tags_fp)
- write_fps.error |= (fclose(write_fps.tags_fp) != 0);
+ write_fps.error |= (safe_fclose(write_fps.tags_fp) != 0);
if (write_fps.error != 0) {
diff --git a/src/news.c b/src/news.c
index 7d5fbfa..6c29cfb 100644
--- a/src/news.c
+++ b/src/news.c
@@ -62,6 +62,7 @@
# include "ssl.h"
#endif
#include "main.h"
+#include "safe_fclose.h"
#define NNTP_PORT 119
#ifdef USE_GNUTLS
@@ -702,7 +703,7 @@ GSList *news_get_group_list(Folder *folder)
}
newsnntp_list_free(grouplist);
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
log_error(LOG_PROTOCOL, ("Can't write newsgroup list\n"));
session_destroy(SESSION(session));
REMOTE_FOLDER(folder)->session = NULL;
@@ -984,7 +985,7 @@ gint news_cancel_article(Folder * folder, MsgInfo * msginfo)
return -1;
}
- if (fclose(tmpfp) == EOF) {
+ if (safe_fclose(tmpfp) == EOF) {
FILE_OP_ERROR(tmp, "fclose");
claws_unlink(tmp);
g_free(tmp);
diff --git a/src/partial_download.c b/src/partial_download.c
index e0283cc..384393e 100644
--- a/src/partial_download.c
+++ b/src/partial_download.c
@@ -63,6 +63,7 @@
#include "folder.h"
#include "procheader.h"
#include "msgcache.h"
+#include "safe_fclose.h"
int partial_msg_in_uidl_list(MsgInfo *msginfo)
{
@@ -248,7 +249,7 @@ static int partial_uidl_mark_mail(MsgInfo *msginfo, int download)
g_free(stat);
}
}
- if (fclose(fpnew) == EOF) {
+ if (safe_fclose(fpnew) == EOF) {
FILE_OP_ERROR(pathnew, "fclose");
fclose(fp);
g_free(path);
@@ -308,7 +309,7 @@ static int partial_uidl_mark_mail(MsgInfo *msginfo, int download)
goto bail;
}
}
- if (fclose(fpnew) == EOF) {
+ if (safe_fclose(fpnew) == EOF) {
FILE_OP_ERROR(pathnew, "fclose");
fclose(fp);
g_free(pathnew);
diff --git a/src/plugins/acpi_notifier/acpi_notifier.c b/src/plugins/acpi_notifier/acpi_notifier.c
index 1f96ea2..f8abb0b 100644
--- a/src/plugins/acpi_notifier/acpi_notifier.c
+++ b/src/plugins/acpi_notifier/acpi_notifier.c
@@ -47,6 +47,7 @@
#include "utils.h"
#include "folder_item_prefs.h"
#include "gtkcmoptionmenu.h"
+#include "safe_fclose.h"
#define PREFS_BLOCK_NAME "AcpiNotifier"
#define PLUGIN_NAME _("Acpi Notifier")
@@ -676,7 +677,7 @@ static void acpi_set(gboolean on)
} else {
fwrite(acpiprefs.off_param, 1, strlen(acpiprefs.off_param), fp);
}
- fclose(fp);
+ safe_fclose(fp);
} else {
gchar *cmd = g_strdup_printf("%s %s",
acpiprefs.file_path,
diff --git a/src/plugins/bogofilter/bogofilter.c b/src/plugins/bogofilter/bogofilter.c
index a0823e9..446b652 100644
--- a/src/plugins/bogofilter/bogofilter.c
+++ b/src/plugins/bogofilter/bogofilter.c
@@ -52,6 +52,7 @@
#include "prefs_common.h"
#include "alertpanel.h"
#include "addr_compl.h"
+#include "safe_fclose.h"
#ifdef HAVE_SYSEXITS_H
#include <sysexits.h>
@@ -279,7 +280,7 @@ static void bogofilter_do_filter(BogoFilterData *data)
}
}
fclose(input);
- if (fclose(output) == EOF)
+ if (safe_fclose(output) == EOF)
err = TRUE;
if (!err)
move_file(tmpfile, file, TRUE);
diff --git a/src/plugins/fancy/claws.def b/src/plugins/fancy/claws.def
index d264aed..a7fa4db 100644
--- a/src/plugins/fancy/claws.def
+++ b/src/plugins/fancy/claws.def
@@ -85,6 +85,7 @@ procmsg_msginfo_unset_flags
procmsg_register_spam_learner
procmsg_spam_set_folder
procmsg_unregister_spam_learner
+safe_fclose
settings
start_address_completion
statusbar_pop_all
diff --git a/src/plugins/fancy/fancy_viewer.c b/src/plugins/fancy/fancy_viewer.c
index 7f5e0f6..1823fd4 100644
--- a/src/plugins/fancy/fancy_viewer.c
+++ b/src/plugins/fancy/fancy_viewer.c
@@ -28,6 +28,7 @@
#include <fancy_viewer.h>
#include <fancy_prefs.h>
#include <alertpanel.h>
+#include <safe_fclose.h>
#include <printing.h>
#include <webkit/webkithittestresult.h>
@@ -670,7 +671,7 @@ static void *download_file_curl (void *data)
if (CURLE_OK != res)
alertpanel_error(_("An error occurred: %d\n"), res);
if (viewer->stream)
- fclose(viewer->stream);
+ safe_fclose(viewer->stream);
curl_global_cleanup();
}
#ifdef USE_PTHREAD
diff --git a/src/plugins/libravatar/claws.def b/src/plugins/libravatar/claws.def
index faf52cc..924b5d1 100644
--- a/src/plugins/libravatar/claws.def
+++ b/src/plugins/libravatar/claws.def
@@ -36,5 +36,6 @@ prefs_write_param
prefs_common_get_prefs
procmsg_msginfo_add_avatar
procmsg_msginfo_get_avatar
+safe_fclose
slist_free_strings_full
to_human_readable
diff --git a/src/plugins/libravatar/libravatar_image.c b/src/plugins/libravatar/libravatar_image.c
index 02c7e4b..66a0e1d 100644
--- a/src/plugins/libravatar/libravatar_image.c
+++ b/src/plugins/libravatar/libravatar_image.c
@@ -27,6 +27,7 @@
#include <common/claws.h>
#include <prefs_common.h>
+#include <safe_fclose.h>
#include "libravatar.h"
#include "libravatar_prefs.h"
@@ -106,7 +107,7 @@ static GdkPixbuf *pixbuf_from_url(const gchar *url, const gchar *md5, const gcha
debug_print("retrieving URL to file: %s -> %s\n", url, filename);
curl_easy_perform(curl);
filesize = ftell(file);
- fclose(file);
+ safe_fclose(file);
if (filesize < MIN_PNG_SIZE)
debug_print("not enough data for an avatar image: %ld bytes\n", filesize);
else
diff --git a/src/plugins/libravatar/libravatar_missing.c b/src/plugins/libravatar/libravatar_missing.c
index 5ea99a7..6a01911 100644
--- a/src/plugins/libravatar/libravatar_missing.c
+++ b/src/plugins/libravatar/libravatar_missing.c
@@ -21,6 +21,7 @@
#include "libravatar_missing.h"
#include "libravatar_prefs.h"
#include "utils.h"
+#include "safe_fclose.h"
/**
* Loads the hash table of md5sum → time from the given filename.
@@ -108,7 +109,7 @@ gint missing_save_to_file(GHashTable *table, const gchar *filename)
g_hash_table_foreach(table, missing_save_item, (gpointer)file);
debug_print("Saved %u missing avatar entries\n", g_hash_table_size(table));
- if (fclose(file) != 0) {
+ if (safe_fclose(file) != 0) {
g_warning("error closing '%s'", filename);
return -1;
}
diff --git a/src/plugins/mailmbox/claws.def b/src/plugins/mailmbox/claws.def
index 5d8ff75..0f686d3 100644
--- a/src/plugins/mailmbox/claws.def
+++ b/src/plugins/mailmbox/claws.def
@@ -28,3 +28,4 @@ prefs_set_default
prefs_write_open
prefs_write_param
prefs_common_get_prefs
+safe_fclose
\ No newline at end of file
diff --git a/src/plugins/mailmbox/mailmbox_folder.c b/src/plugins/mailmbox/mailmbox_folder.c
index 8b601fc..1db007b 100644
--- a/src/plugins/mailmbox/mailmbox_folder.c
+++ b/src/plugins/mailmbox/mailmbox_folder.c
@@ -56,6 +56,7 @@
#include "mailmbox.h"
#include "mailmbox_folder.h"
#include "mailmbox_parse.h"
+#include "safe_fclose.h"
#define MAILMBOX_CACHE_DIR "mailmboxcache"
@@ -257,7 +258,7 @@ static void write_max_uid_value(FolderItem *item, guint max_uid)
return;
}
- fclose(f);
+ safe_fclose(f);
}
static void claws_mailmbox_folder_item_destroy(Folder *folder, FolderItem *_item)
@@ -471,7 +472,7 @@ static gchar *s_claws_mailmbox_fetch_msg(Folder *folder, FolderItem *item, gint
if (r == 0)
goto close;
- fclose(f);
+ safe_fclose(f);
return file;
diff --git a/src/plugins/pgpinline/claws.def b/src/plugins/pgpinline/claws.def
index c9f0ecd..a07c65f 100644
--- a/src/plugins/pgpinline/claws.def
+++ b/src/plugins/pgpinline/claws.def
@@ -22,3 +22,4 @@ procmime_scan_file
procmime_write_mimeinfo
procmime_get_part
procmime_get_tmp_file_name
+safe_fclose
\ No newline at end of file
diff --git a/src/plugins/pgpinline/pgpinline.c b/src/plugins/pgpinline/pgpinline.c
index 6ebb883..bd2f026 100644
--- a/src/plugins/pgpinline/pgpinline.c
+++ b/src/plugins/pgpinline/pgpinline.c
@@ -28,6 +28,7 @@
#include <glib/gi18n.h>
#include <errno.h>
#include <gpgme.h>
+#include <safe_fclose.h>
#include "utils.h"
#include "privacy.h"
@@ -410,7 +411,7 @@ static MimeInfo *pgpinline_decrypt(MimeInfo *mimeinfo)
}
}
- if (fclose(dstfp) == EOF) {
+ if (safe_fclose(dstfp) == EOF) {
FILE_OP_ERROR(fname, "fclose");
privacy_set_error(_("Couldn't close decrypted file %s"), fname);
g_free(fname);
diff --git a/src/plugins/pgpmime/claws.def b/src/plugins/pgpmime/claws.def
index fe03c78..0d01d49 100644
--- a/src/plugins/pgpmime/claws.def
+++ b/src/plugins/pgpmime/claws.def
@@ -18,3 +18,4 @@ procmime_mimeinfo_new
procmime_mimeinfo_parent
procmime_scan_file
procmime_write_mimeinfo
+safe_fclose
\ No newline at end of file
diff --git a/src/plugins/pgpmime/pgpmime.c b/src/plugins/pgpmime/pgpmime.c
index 8dc761d..ff01c93 100644
--- a/src/plugins/pgpmime/pgpmime.c
+++ b/src/plugins/pgpmime/pgpmime.c
@@ -42,6 +42,7 @@
#include <plugins/pgpcore/pgp_utils.h>
#include "prefs_common.h"
+#include "safe_fclose.h"
typedef struct _PrivacyDataPGP PrivacyDataPGP;
@@ -384,7 +385,7 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
}
g_free(chars);
- if (fclose(dstfp) == EOF) {
+ if (safe_fclose(dstfp) == EOF) {
FILE_OP_ERROR(fname, "fclose");
privacy_set_error(_("Couldn't close decrypted file %s"), fname);
g_free(fname);
diff --git a/src/plugins/rssyl/claws.def b/src/plugins/rssyl/claws.def
index 5f257e5..6fc560f 100644
--- a/src/plugins/rssyl/claws.def
+++ b/src/plugins/rssyl/claws.def
@@ -116,6 +116,7 @@ procheader_parse_file
procmsg_get_message_file
procmsg_msginfo_unset_flags
remove_dir_recursive
+safe_fclose
slist_free_strings_full
strtailchomp
subst_for_shellsafe_filename
diff --git a/src/plugins/rssyl/opml_export.c b/src/plugins/rssyl/opml_export.c
index dfc7c90..884f72c 100644
--- a/src/plugins/rssyl/opml_export.c
+++ b/src/plugins/rssyl/opml_export.c
@@ -32,6 +32,7 @@
#include <log.h>
#include <folder.h>
#include <common/utils.h>
+#include <safe_fclose.h>
/* Local includes */
#include "libfeed/date.h"
@@ -185,7 +186,7 @@ void rssyl_opml_export(void)
debug_print("RSSyl: Feed export finished.\n");
- fclose(f);
+ safe_fclose(f);
g_free(opmlfile);
g_free(ctx);
}
diff --git a/src/plugins/rssyl/rssyl_add_item.c b/src/plugins/rssyl/rssyl_add_item.c
index 685d75b..048eb04 100644
--- a/src/plugins/rssyl/rssyl_add_item.c
+++ b/src/plugins/rssyl/rssyl_add_item.c
@@ -34,6 +34,7 @@
#include <codeconv.h>
#include <procmsg.h>
#include <common/utils.h>
+#include <safe_fclose.h>
/* Local includes */
#include "libfeed/date.h"
@@ -546,7 +547,7 @@ void rssyl_add_item(RFolderItem *ritem, FeedItem *feed_item)
feed_item_enclosure_get_size(enc) );
fprintf(f, "</body></html>\n");
- fclose(f);
+ safe_fclose(f);
g_return_if_fail(template != NULL);
diff --git a/src/plugins/rssyl/rssyl_deleted.c b/src/plugins/rssyl/rssyl_deleted.c
index 497ed34..f6e6a76 100644
--- a/src/plugins/rssyl/rssyl_deleted.c
+++ b/src/plugins/rssyl/rssyl_deleted.c
@@ -31,6 +31,7 @@
/* Claws Mail includes */
#include <codeconv.h>
#include <common/utils.h>
+#include <safe_fclose.h>
/* Local includes */
#include "rssyl.h"
@@ -188,7 +189,7 @@ static void rssyl_deleted_store_internal(GSList *deleted_items, const gchar *del
g_slist_foreach(deleted_items, (GFunc)_store_one_deleted_item,
(gpointer)f);
- fclose(f);
+ safe_fclose(f);
debug_print("RSSyl: written and closed deletion file\n");
}
diff --git a/src/plugins/smime/claws.def b/src/plugins/smime/claws.def
index eec9eb5..09f67d1 100644
--- a/src/plugins/smime/claws.def
+++ b/src/plugins/smime/claws.def
@@ -26,4 +26,5 @@ procmime_mimeinfo_parent
procmime_scan_file
procmime_write_mime_header
procmime_write_mimeinfo
+safe_fclose
str_write_to_file
diff --git a/src/plugins/smime/smime.c b/src/plugins/smime/smime.c
index 93268a3..08d8dc2 100644
--- a/src/plugins/smime/smime.c
+++ b/src/plugins/smime/smime.c
@@ -43,6 +43,7 @@
#include "prefs_common.h"
#include "procmime.h"
#include "plugin.h"
+#include "safe_fclose.h"
typedef struct _PrivacyDataPGP PrivacyDataPGP;
@@ -480,7 +481,7 @@ static MimeInfo *smime_decrypt(MimeInfo *mimeinfo)
return NULL;
}
}
- if (fclose(dstfp) == EOF) {
+ if (safe_fclose(dstfp) == EOF) {
FILE_OP_ERROR(fname, "fclose");
g_free(fname);
g_free(chars);
@@ -804,7 +805,7 @@ gboolean smime_encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
procmime_decode_content(msgcontent);
procmime_write_mime_header(msgcontent, fp);
procmime_write_mimeinfo(msgcontent, fp);
- fclose(fp);
+ safe_fclose(fp);
canonicalize_file_replace(tmpfile);
fp = g_fopen(tmpfile, "rb");
if (fp == NULL) {
@@ -846,7 +847,7 @@ gboolean smime_encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
g_free(enccontent);
return FALSE;
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmpfile, "fclose");
claws_unlink(tmpfile);
g_free(tmpfile);
diff --git a/src/plugins/vcalendar/claws.def b/src/plugins/vcalendar/claws.def
index a0add79..f6d4208 100644
--- a/src/plugins/vcalendar/claws.def
+++ b/src/plugins/vcalendar/claws.def
@@ -144,6 +144,7 @@ procmsg_msginfo_get_full_info
procmsg_send_message_queue_with_lock
qp_encode_line
remove_dir_recursive
+safe_fclose
slist_free_strings
slist_free_strings_full
statusbar_progress_all
diff --git a/src/plugins/vcalendar/vcal_meeting_gtk.c b/src/plugins/vcalendar/vcal_meeting_gtk.c
index d0ea92f..c12ece7 100644
--- a/src/plugins/vcalendar/vcal_meeting_gtk.c
+++ b/src/plugins/vcalendar/vcal_meeting_gtk.c
@@ -54,6 +54,7 @@
#include "gtkutils.h"
#include "log.h"
#include "utils.h"
+#include "safe_fclose.h"
struct _VCalMeeting
{
@@ -1858,7 +1859,7 @@ void multisync_export(void)
FILE_OP_ERROR(file, "fprintf");
g_free(file);
}
- if (fclose(fp) == EOF)
+ if (safe_fclose(fp) == EOF)
FILE_OP_ERROR(file, "fclose");
} else {
FILE_OP_ERROR(file, "fopen");
diff --git a/src/pop.c b/src/pop.c
index e8831a0..f89ddc3 100644
--- a/src/pop.c
+++ b/src/pop.c
@@ -40,6 +40,7 @@
#include "partial_download.h"
#include "log.h"
#include "hooks.h"
+#include "safe_fclose.h"
static gint pop3_greeting_recv (Pop3Session *session,
const gchar *msg);
@@ -705,7 +706,7 @@ gint pop3_write_uidl_list(Pop3Session *session)
> 0);
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmp_path, "fclose");
fp = NULL;
goto err_write;
@@ -806,7 +807,7 @@ static gint pop3_write_msg_to_file(const gchar *file, const gchar *data,
}
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(file, "fclose");
claws_unlink(file);
return -1;
diff --git a/src/prefs_common.c b/src/prefs_common.c
index b479e0f..444d677 100644
--- a/src/prefs_common.c
+++ b/src/prefs_common.c
@@ -61,6 +61,8 @@
#include "prefswindow.h"
#include "colorlabel.h"
#include "passwordstore.h"
+#include "safe_fclose.h"
+
#ifndef USE_ALT_ADDRBOOK
#include "addrcustomattr.h"
#endif
@@ -1399,7 +1401,7 @@ static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *
fputc('\n', fp) != EOF);
}
- if (fclose(fp) == EOF) {
+ if (safe_fclose(fp) == EOF) {
FILE_OP_ERROR(tmp_path, "fclose");
fp = NULL;
goto out;
@@ -1415,7 +1417,7 @@ static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *
out:
if (fp)
- fclose(fp);
+ safe_fclose(fp);
g_free(tmp_path);
g_free(path);
}
diff --git a/src/procmsg.c b/src/procmsg.c
index df05e9b..5c776b4 100644
--- a/src/procmsg.c
+++ b/src/procmsg.c
@@ -49,6 +49,7 @@
#include "timing.h"
#include "inc.h"
#include "privacy.h"
+#include "safe_fclose.h"
extern SessionStats session_stats;
@@ -1120,7 +1121,7 @@ gint procmsg_remove_special_headers(const gchar *in, const gchar *out)
return -1;
}
}
- fclose(outfp);
+ safe_fclose(outfp);
fclose(fp);
return 0;
}
@@ -1705,7 +1706,7 @@ send_mail:
}
}
}
- fclose(tmpfp);
+ safe_fclose(tmpfp);
if (newsval == 0) {
debug_print("Sending message by news\n");
@@ -2339,14 +2340,14 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimei
}
if (fp && procmime_write_mimeinfo(mimeinfo, fp) >= 0) {
- fclose(fp);
+ safe_fclose(fp);
fp = NULL;
tmp_msginfo = procheader_parse_file(
tmpfile, flags,
TRUE, FALSE);
}
if (fp)
- fclose(fp);
+ safe_fclose(fp);
if (tmp_msginfo != NULL) {
if (src_msginfo)
diff --git a/src/safe_fclose.c b/src/safe_fclose.c
new file mode 100644
index 0000000..bec77fd
--- /dev/null
+++ b/src/safe_fclose.c
@@ -0,0 +1,46 @@
+/*
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2018 Colin Leroy and the Claws Mail team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#include "claws-features.h"
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include "prefs_common.h"
+#include "common/timing.h"
+
+int safe_fclose(FILE *fp)
+{
+ int r;
+ START_TIMING("");
+
+ if (fflush(fp) != 0) {
+ return EOF;
+ }
+ if (prefs_common_get_prefs()->flush_metadata && fsync(fileno(fp)) != 0) {
+ return EOF;
+ }
+
+ r = fclose(fp);
+ END_TIMING();
+
+ return r;
+}
diff --git a/src/safe_fclose.h b/src/safe_fclose.h
new file mode 100644
index 0000000..f0153a5
--- /dev/null
+++ b/src/safe_fclose.h
@@ -0,0 +1,24 @@
+/*
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2018 Colin Leroy and the Claws Mail team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __SAFE_FCLOSE_H__
+#define __SAFE_FCLOSE_H__
+
+int safe_fclose(FILE *fp);
+
+#endif
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list