From f6a25b331f2045a168461320c5abba76975119c6 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Sat, 23 Jul 2011 12:49:08 +0200 Subject: [PATCH] check return value from close() after write() otherwise we may lose data when quota is exceeded or nfs is in a bad mood. --- src/drv_maildir.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 05a1ee4..09d5e5f 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -1028,7 +1028,11 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, close( fd ); return cb( DRV_BOX_BAD, 0, aux ); } - close( fd ); + if (close( fd ) < 0) { + /* Quota exceeded may cause this. */ + perror( buf ); + return cb( DRV_BOX_BAD, 0, aux ); + } /* Moving seen messages to cur/ is strictly speaking incorrect, but makes mutt happy. */ nfsnprintf( nbuf, sizeof(nbuf), "%s%s/%s/%s%s", prefix, box, subdirs[!(data->flags & F_SEEN)], base, fbuf ); if (rename( buf, nbuf )) {