view src/lib-imap/imap-match.h @ 8999:afc1b0ef120d HEAD

When :MAILBOXDIR= was empty, we might have appended extra '/' to it, which caused problems.
author Timo Sirainen <tss@iki.fi>
date Thu, 30 Apr 2009 20:00:09 -0400
parents e4eb71ae8e96
children
line wrap: on
line source

#ifndef IMAP_MATCH_H
#define IMAP_MATCH_H

enum imap_match_result {
	IMAP_MATCH_NO 		= 0x00, /* definite non-match */
	IMAP_MATCH_YES		= 0x01, /* match */

	/* YES and NO are returned alone, but CHILDREN and PARENT may be
	   returned both (eg. "foo*bar" vs. "foobar/baz") */

	/* non-match, but its children could match (eg. "box" vs "box/%") */
	IMAP_MATCH_CHILDREN	= 0x02,
	/* non-match, but one of its parents does match. This should often be
	   handled with YES matches, because when listing for "%" and "box/foo"
	   exists but "box" doesn't, you should still list "box" as
	   (Nonexistent HasChildren) mailbox. */
	IMAP_MATCH_PARENT	= 0x04
};

struct imap_match_glob;

/* If inboxcase is TRUE, the "INBOX" string at the beginning of line is
   compared case-insensitively */
struct imap_match_glob *
imap_match_init(pool_t pool, const char *pattern,
		bool inboxcase, char separator);
struct imap_match_glob *
imap_match_init_multiple(pool_t pool, const char *const *patterns,
			 bool inboxcase, char separator);

void imap_match_deinit(struct imap_match_glob **glob);

enum imap_match_result
imap_match(struct imap_match_glob *glob, const char *data);

#endif