]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail_index_lookup() and mail_index_lookup_extra() now returns 0 if message
authorTimo Sirainen <tss@iki.fi>
Sun, 20 Jun 2004 04:17:42 +0000 (07:17 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 20 Jun 2004 04:17:42 +0000 (07:17 +0300)
has been expunged, 1 if not.

--HG--
branch : HEAD

src/lib-index/mail-index-view.c
src/lib-index/mail-index.h

index eb8a1f49e190749b095e9de11fb33fb1e75f4e57..8db2418c414935384c69c6c7716e46a3da971c08 100644 (file)
@@ -178,7 +178,7 @@ static int mail_index_lookup_int(struct mail_index_view *view, uint32_t seq,
        if (view->map == view->index->map) {
                *map_r = view->map;
                *rec_r = rec;
-               return 0;
+               return 1;
        }
 
        if (mail_index_view_lock_head(view, FALSE) < 0)
@@ -193,7 +193,7 @@ static int mail_index_lookup_int(struct mail_index_view *view, uint32_t seq,
 
        if (seq == 0) {
                *rec_r = NULL;
-               return 0;
+               return 1;
        }
 
        do {
@@ -204,8 +204,13 @@ static int mail_index_lookup_int(struct mail_index_view *view, uint32_t seq,
                        break;
        } while (seq > 0);
 
-       *rec_r = n_rec->uid == uid ? n_rec : rec;
-       return 0;
+       if (n_rec->uid == uid) {
+               *rec_r = n_rec;
+               return 1;
+       } else {
+               *rec_r = rec;
+               return 0;
+       }
 }
 
 int mail_index_lookup(struct mail_index_view *view, uint32_t seq,
@@ -213,7 +218,7 @@ int mail_index_lookup(struct mail_index_view *view, uint32_t seq,
 {
        struct mail_index_map *map;
 
-        return mail_index_lookup_int(view, seq, &map, rec_r);
+       return mail_index_lookup_int(view, seq, &map, rec_r);
 }
 
 int mail_index_lookup_uid(struct mail_index_view *view, uint32_t seq,
@@ -235,20 +240,21 @@ int mail_index_lookup_extra(struct mail_index_view *view, uint32_t seq,
        const struct mail_index_record *rec;
        struct mail_index_map *map;
        uint32_t offset;
+       int ret;
 
-       if (mail_index_lookup_int(view, seq, &map, &rec) < 0)
+       if ((ret = mail_index_lookup_int(view, seq, &map, &rec)) < 0)
                return -1;
 
        if (rec == NULL) {
                *data_r = NULL;
-               return 0;
+               return ret;
        }
 
        /* FIXME: do data_id mapping conversion */
 
        offset = view->index->extra_records[data_id].offset;
        *data_r = CONST_PTR_OFFSET(rec, offset);
-       return 0;
+       return ret;
 }
 
 static uint32_t mail_index_bsearch_uid(struct mail_index_view *view,
index 6df0b31290a0de5f508a666391af9a78d00ecff8..0067da8de6c89b11105957150c875f46435d4c21 100644 (file)
@@ -238,15 +238,16 @@ void mail_index_view_sync_end(struct mail_index_view_sync_ctx *ctx);
 /* Returns the index header. */
 int mail_index_get_header(struct mail_index_view *view,
                          const struct mail_index_header **hdr_r);
-/* Returns the given message. */
+/* Returns the given message. Returns -1 if error, 1 if ok, 0 if mail was
+   expunged but data was returned from some older index.  */
 int mail_index_lookup(struct mail_index_view *view, uint32_t seq,
                      const struct mail_index_record **rec_r);
 /* Returns the UID for given message. May be slightly faster than
-   mail_index_lookup()->uid */
+   mail_index_lookup()->uid. */
 int mail_index_lookup_uid(struct mail_index_view *view, uint32_t seq,
                          uint32_t *uid_r);
 /* Returns the wanted extra data for given message. If it doesn't exist,
-   *data_r is set to NULL. */
+   *data_r is set to NULL. Return values are same as for mail_index_lookup(). */
 int mail_index_lookup_extra(struct mail_index_view *view, uint32_t seq,
                            uint32_t data_id, const void **data_r);
 /* Convert UID range to sequence range. If no UIDs are found, sequences are