commit a954aeec967ebbe9e01386d245a50b7b224e1488
parent 5c08b1c4bddbe18a722dc2338fc0021465f50c2b
Author: Michael Elkins <me@mutt.org>
Date: Fri, 22 Dec 2000 15:48:04 +0000
fixed sync_mailbox() to correctly write new messages to the local maildir
box (Thomas Roessler <roessler@does-not-exist.org>)
Diffstat:
M | main.c | | | 1 | - |
M | sync.c | | | 50 | ++++++++++++++++++++++---------------------------- |
2 files changed, 22 insertions(+), 29 deletions(-)
diff --git a/main.c b/main.c
@@ -26,7 +26,6 @@
#include <errno.h>
#include <string.h>
#include <ctype.h>
-#include <termios.h>
#include "isync.h"
#if HAVE_GETOPT_LONG
diff --git a/sync.c b/sync.c
@@ -25,7 +25,6 @@
#include <time.h>
#include <fcntl.h>
#include <string.h>
-#include <sys/stat.h>
#include <errno.h>
#include "isync.h"
@@ -47,10 +46,10 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags, unsigned int max_size)
message_t *tmp;
char path[_POSIX_PATH_MAX];
char newpath[_POSIX_PATH_MAX];
+ char suffix[_POSIX_PATH_MAX];
char *p;
int fd;
int ret;
- struct stat sb;
if (mbox->uidvalidity != (unsigned int) -1)
{
@@ -137,46 +136,43 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags, unsigned int max_size)
continue;
}
+ /* construct the flags part of the file name. */
+
+ *suffix = 0;
+ if (cur->flags)
+ {
+ snprintf (suffix, sizeof (suffix), ":2,%s%s%s%s",
+ (cur->flags & D_FLAGGED) ? "F" : "",
+ (cur->flags & D_ANSWERED) ? "R" : "",
+ (cur->flags & D_SEEN) ? "S" : "",
+ (cur->flags & D_DELETED) ? "T" : "");
+ }
+
for (;;)
{
/* create new file */
- snprintf (path, sizeof (path), "%s/tmp/%s.%ld_%d.%d.UID%d",
+ snprintf (path, sizeof (path), "%s/tmp/%s.%ld_%d.%d.UID%d%s",
mbox->path, Hostname, time (0), MaildirCount++,
- getpid (), cur->uid);
+ getpid (), cur->uid, suffix);
- if (stat (path, &sb))
+ if ((fd = open (path, O_WRONLY | O_CREAT | O_EXCL, 0600)) > 0)
+ break;
+ if (errno != EEXIST)
{
- if (errno == ENOENT)
- break;
+ perror ("open");
+ break;
}
sleep (2);
}
-
- if (cur->flags)
- {
- /* append flags */
- snprintf (path + strlen (path), sizeof (path) - strlen (path),
- ":2,%s%s%s%s",
- (cur->flags & D_FLAGGED) ? "F" : "",
- (cur->flags & D_ANSWERED) ? "R" : "",
- (cur->flags & D_SEEN) ? "S" : "",
- (cur->flags & D_DELETED) ? "T" : "");
- }
+ if (fd < 0)
+ continue;
/* give some visual feedback that something is happening */
fputs (".", stdout);
fflush (stdout);
-// printf("creating %s\n", path);
- fd = open (path, O_WRONLY | O_CREAT | O_EXCL, 0600);
- if (fd < 0)
- {
- perror ("open");
- continue;
- }
-
ret = imap_fetch_message (imap, cur->uid, fd);
if (close (fd))
@@ -188,8 +184,6 @@ sync_mailbox (mailbox_t * mbox, imap_t * imap, int flags, unsigned int max_size)
snprintf (newpath, sizeof (newpath), "%s/%s%s", mbox->path,
(cur->flags & D_SEEN) ? "cur" : "new", p);
- // printf ("moving %s to %s\n", path, newpath);
-
/* its ok if this fails, the next time we sync the message
* will get pulled down
*/