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

Reply via email to