compile and run!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.5 KiB

// SPDX-FileCopyrightText: 2022 Oswald Buddenhagen <ossi@users.sf.net>
// SPDX-License-Identifier: GPL-2.0-or-later WITH LicenseRef-isync-GPL-exception
//
// mbsync - mailbox synchronizer
//
#ifndef IMAP_P_H
#define IMAP_P_H
#include "driver.h"
//#define DEBUG_IMAP_MSGS
typedef union imap_message {
message_t gen;
struct {
MESSAGE(union imap_message)
union imap_message *prev; // Used to optimize lookup by seq.
// This is made relative once the fetches complete - to avoid that
// each expunge re-enumerates all subsequent messages. Dead messages
// "occupy" no sequence number themselves, but may still jump a gap.
// Note that use of sequence numbers to address messages in commands
// imposes limitations on permissible pipelining. We don't do that,
// so this is of no concern; however, we might miss the closing of
// a gap, which would result in a tiny performance hit.
uint seq;
};
} imap_message_t;
typedef struct {
imap_message_t *head;
imap_message_t **tail;
// Bulk changes (which is where performance matters) are assumed to be
// reported sequentially (be it forward or reverse), so walking the
// sorted linked list from the previously used message is efficient.
imap_message_t *cursor_ptr;
uint cursor_seq;
uint count;
} imap_messages_t;
imap_message_t *imap_new_msg( imap_messages_t *msgs );
imap_message_t *imap_expunge_msg( imap_messages_t *msgs, uint fseq );
void reset_imap_messages( imap_messages_t *msgs );
void imap_ensure_relative( imap_messages_t *msgs );
void imap_ensure_absolute( imap_messages_t *msgs );
#endif