changeset 6933:ad16a4582033 HEAD

If file is lost, don't try to look for it until stack overflows.
author Timo Sirainen <tss@iki.fi>
date Wed, 05 Dec 2007 17:06:37 +0200
parents 90b63ce0c6a5
children f6118fc9c23e
files src/lib-storage/index/maildir/maildir-sync.c src/lib-storage/index/maildir/maildir-uidlist.c src/lib-storage/index/maildir/maildir-uidlist.h
diffstat 3 files changed, 23 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-sync.c	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-sync.c	Wed Dec 05 17:06:37 2007 +0200
@@ -827,8 +827,8 @@
 	}
 
 	if (find_uid != NULL && *find_uid != 0) {
-		if (maildir_uidlist_lookup(ctx->mbox->uidlist, *find_uid,
-					   &flags) == NULL) {
+		if (maildir_uidlist_lookup_nosync(ctx->mbox->uidlist, *find_uid,
+						  &flags) == NULL) {
 			/* UID is expunged */
 			*find_uid = 0;
 		} else if ((flags & MAILDIR_UIDLIST_REC_FLAG_NONSYNCED) == 0) {
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Dec 05 17:06:37 2007 +0200
@@ -740,11 +740,10 @@
 maildir_uidlist_lookup(struct maildir_uidlist *uidlist, uint32_t uid,
 		       enum maildir_uidlist_rec_flag *flags_r)
 {
-	const struct maildir_uidlist_rec *rec;
-	unsigned int idx;
+	const char *fname;
 
-	rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
-	if (rec == NULL) {
+	fname = maildir_uidlist_lookup_nosync(uidlist, uid, flags_r);
+	if (fname == NULL) {
 		if (uidlist->fd != -1 || uidlist->mbox == NULL)
 			return NULL;
 
@@ -753,11 +752,23 @@
 			return NULL;
 
 		/* try again */
-		rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
-		if (rec == NULL)
-			return NULL;
+		fname = maildir_uidlist_lookup_nosync(uidlist, uid, flags_r);
 	}
 
+	return fname;
+}
+
+const char *
+maildir_uidlist_lookup_nosync(struct maildir_uidlist *uidlist, uint32_t uid,
+			      enum maildir_uidlist_rec_flag *flags_r)
+{
+	const struct maildir_uidlist_rec *rec;
+	unsigned int idx;
+
+	rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
+	if (rec == NULL)
+		return NULL;
+
 	*flags_r = rec->flags;
 	return rec->filename;
 }
--- a/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Dec 05 17:06:37 2007 +0200
@@ -57,6 +57,9 @@
 const char *
 maildir_uidlist_lookup(struct maildir_uidlist *uidlist, uint32_t uid,
 		       enum maildir_uidlist_rec_flag *flags_r);
+const char *
+maildir_uidlist_lookup_nosync(struct maildir_uidlist *uidlist, uint32_t uid,
+			      enum maildir_uidlist_rec_flag *flags_r);
 /* Returns extension's value or NULL if it doesn't exist. */
 const char *
 maildir_uidlist_lookup_ext(struct maildir_uidlist *uidlist, uint32_t uid,