view src/plugins/expire/expire-set.c @ 17130:add8c00fb3cc

Updated copyright notices to include year 2014.
author Timo Sirainen <tss@iki.fi>
date Tue, 04 Feb 2014 16:23:22 -0500
parents 36ef72481934
children 3009a1a6f6d5
line wrap: on
line source

/* Copyright (c) 2006-2014 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "array.h"
#include "imap-match.h"
#include "expire-set.h"

#include <stdlib.h>

struct expire_set {
	pool_t pool;
	ARRAY(struct imap_match_glob *) globs;
};

struct expire_set *expire_set_init(const char *const *patterns)
{
	struct expire_set *set;
	struct imap_match_glob *glob;
	const char *const *pattern;
	pool_t pool;

	pool = pool_alloconly_create("Expire pool", 512);
	set = p_new(pool, struct expire_set, 1);
	set->pool = pool;
	p_array_init(&set->globs, set->pool, 16);

	for (pattern = patterns; *pattern != NULL; pattern++) {
		glob = imap_match_init(set->pool, *pattern, TRUE, '/');
		array_append(&set->globs, &glob, 1);
	}
	return set;
}

void expire_set_deinit(struct expire_set **_set)
{
	struct expire_set *set = *_set;

	*_set = NULL;
	pool_unref(&set->pool);
}

bool expire_set_lookup(struct expire_set *set, const char *mailbox)
{
	struct imap_match_glob *const *globp;

	array_foreach(&set->globs, globp) {
		if (imap_match(*globp, mailbox) == IMAP_MATCH_YES)
			return TRUE;
	}
	return FALSE;
}