isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 7726ce3e0f57f39f9040de4f85dc04f99b859f29
parent 5224b5bc9fa4dbfa465a5e884b1d5f774502c7ba
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sat, 11 Feb 2006 20:14:31 +0000

don't barf at directories with none of {tmp,new,cur}/ and turn them
into maildirs instead. see next commit.

Diffstat:
Msrc/drv_maildir.c | 17+++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/drv_maildir.c b/src/drv_maildir.c @@ -212,7 +212,7 @@ maildir_validate( const char *prefix, const char *box, int create ) DIR *dirp; struct dirent *entry; time_t now; - int i, bl; + int i, j, bl; struct stat st; char buf[_POSIX_PATH_MAX]; @@ -225,6 +225,7 @@ maildir_validate( const char *prefix, const char *box, int create ) buf, strerror(errno), errno ); return DRV_STORE_BAD; } + mkdirs: for (i = 0; i < 3; i++) { memcpy( buf + bl, subdirs[i], 4 ); if (mkdir( buf, 0700 )) { @@ -243,12 +244,16 @@ maildir_validate( const char *prefix, const char *box, int create ) return DRV_BOX_BAD; } } else { - for (i = 0; i < 3; i++) { + for (i = j = 0; i < 3; i++) { memcpy( buf + bl, subdirs[i], 4 ); - if (stat( buf, &st ) || !S_ISDIR(st.st_mode)) { - fprintf( stderr, "Maildir error: '%.*s' is no valid mailbox\n", bl, buf ); - return DRV_BOX_BAD; - } + if (!stat( buf, &st ) && S_ISDIR(st.st_mode)) + j++; + } + if (!j) + goto mkdirs; + if (j != 3) { + fprintf( stderr, "Maildir error: '%.*s' is no valid mailbox\n", bl, buf ); + return DRV_BOX_BAD; } memcpy( buf + bl, "tmp/", 5 ); bl += 4;