commit 3316e812086551cc647ca06ba9f2b52d87473a9f Author: Oswald Buddenhagen <o...@kde.org> Date: Sat Aug 11 17:11:57 2012 +0200
calculate trash box path already in maildir_open_store() this gives us some cleaner code paths later on, as we can treat the trash box like a regular mailbox. src/drv_maildir.c | 27 ++++++++++++++------------- 1 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 401c27f..d5e740d 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -64,6 +64,7 @@ typedef struct maildir_store { store_t gen; int uvfd, uvok, nuid; int minuid, maxuid, newuid, nexcs, *excs; + char *trash; #ifdef USE_DB DB *db; #endif /* USE_DB */ @@ -108,6 +109,7 @@ maildir_open_store( store_conf_t *conf, ctx = nfcalloc( sizeof(*ctx) ); ctx->gen.conf = conf; ctx->uvfd = -1; + nfasprintf( &ctx->trash, "%s%s", conf->path, conf->trash ); cb( &ctx->gen, aux ); } @@ -133,6 +135,7 @@ maildir_cleanup( store_t *gctx ) if (ctx->db) ctx->db->close( ctx->db, 0 ); #endif /* USE_DB */ + free( ctx->trash ); free( gctx->path ); free( ctx->excs ); if (ctx->uvfd >= 0) @@ -230,7 +233,7 @@ maildir_free_scan( msglist_t *msglist ) #define _24_HOURS (3600 * 24) static int -maildir_validate( const char *prefix, const char *box, int create, maildir_store_t *ctx ) +maildir_validate( const char *box, int create, maildir_store_t *ctx ) { DIR *dirp; struct dirent *entry; @@ -239,7 +242,7 @@ maildir_validate( const char *prefix, const char *box, int create, maildir_store struct stat st; char buf[_POSIX_PATH_MAX]; - bl = nfsnprintf( buf, sizeof(buf) - 4, "%s%s/", prefix, box ); + bl = nfsnprintf( buf, sizeof(buf) - 4, "%s/", box ); if (stat( buf, &st )) { if (errno == ENOENT) { if (create) { @@ -824,7 +827,7 @@ maildir_select( store_t *gctx, int create, else nfasprintf( &gctx->path, "%s%s", gctx->conf->path, gctx->name ); - if ((ret = maildir_validate( gctx->path, "", create, ctx )) != DRV_OK) { + if ((ret = maildir_validate( gctx->path, create, ctx )) != DRV_OK) { cb( ret, aux ); return; } @@ -1066,7 +1069,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, void (*cb)( int sts, int uid, void *aux ), void *aux ) { maildir_store_t *ctx = (maildir_store_t *)gctx; - const char *prefix, *box; + const char *box; int ret, fd, bl, uid; char buf[_POSIX_PATH_MAX], nbuf[_POSIX_PATH_MAX], fbuf[NUM_FLAGS + 3], base[128]; @@ -1091,15 +1094,13 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, maildir_uidval_unlock( ctx ); nfsnprintf( base + bl, sizeof(base) - bl, ",U=%d", uid ); } - prefix = gctx->path; - box = ""; + box = gctx->path; } else { - prefix = gctx->conf->path; - box = gctx->conf->trash; + box = ctx->trash; } maildir_make_flags( data->flags, fbuf ); - nfsnprintf( buf, sizeof(buf), "%s%s/tmp/%s%s", prefix, box, base, fbuf ); + nfsnprintf( buf, sizeof(buf), "%s/tmp/%s%s", box, base, fbuf ); if ((fd = open( buf, O_WRONLY|O_CREAT|O_EXCL, 0600 )) < 0) { if (errno != ENOENT || !to_trash) { sys_error( "Maildir error: cannot create %s", buf ); @@ -1107,7 +1108,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, cb( DRV_BOX_BAD, 0, aux ); return; } - if ((ret = maildir_validate( gctx->conf->path, gctx->conf->trash, 1, ctx )) != DRV_OK) { + if ((ret = maildir_validate( box, 1, ctx )) != DRV_OK) { free( data->data ); cb( ret, 0, aux ); return; @@ -1137,7 +1138,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, return; } /* 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 ); + nfsnprintf( nbuf, sizeof(nbuf), "%s/%s/%s%s", box, subdirs[!(data->flags & F_SEEN)], base, fbuf ); if (rename( buf, nbuf )) { sys_error( "Maildir error: cannot rename %s to %s", buf, nbuf ); cb( DRV_BOX_BAD, 0, aux ); @@ -1241,12 +1242,12 @@ maildir_trash_msg( store_t *gctx, message_t *gmsg, for (;;) { nfsnprintf( buf, sizeof(buf), "%s/%s/%s", gctx->path, subdirs[gmsg->status & M_RECENT], msg->base ); s = strstr( msg->base, ":2," ); - nfsnprintf( nbuf, sizeof(nbuf), "%s%s/%s/%ld.%d_%d.%s%s", gctx->conf->path, gctx->conf->trash, + nfsnprintf( nbuf, sizeof(nbuf), "%s/%s/%ld.%d_%d.%s%s", ctx->trash, subdirs[gmsg->status & M_RECENT], time( 0 ), Pid, ++MaildirCount, Hostname, s ? s : "" ); if (!rename( buf, nbuf )) break; if (!stat( buf, &st )) { - if ((ret = maildir_validate( gctx->conf->path, gctx->conf->trash, 1, ctx )) != DRV_OK) { + if ((ret = maildir_validate( ctx->trash, 1, ctx )) != DRV_OK) { cb( ret, aux ); return; } ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel