squat-trie.c revision 74d712c38df05a3c175c9e30049d9b535c76bf12
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen/* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen "EOTIRSACDNLMVUGPHBFWYXKJQZ0123456789@.-+#$%_&"
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen struct squat_uidlist_build_context *uidlist_build_ctx;
struct squat_trie_iterate_node {
unsigned int idx;
struct squat_trie_iterate_context {
bool failed;
static unsigned char valid_chars[] =
struct squat_trie *
return trie;
int ret;
if (ret == 0) {
if (ret < 0)
if (ret == 0)
if (ret < 0)
const unsigned int alloc_size =
unsigned char *chars;
for (i = 0; i < SEQUENTIAL_COUNT; i++)
chars[i] = i;
for (i = 0; i < SEQUENTIAL_COUNT; i++)
unsigned char *chars;
return chr;
if (old_child_count == 0) {
const unsigned char *child_chars;
if (child_count == 0)
for (i = 0; i < child_count; i++) {
level);
if (num == 0) {
unsigned int len;
unsigned char *dest;
size) < 0)
const unsigned char *chars;
for (i = 0; i < child_count; i++) {
if (node_offsets[i] == 0)
*bufp++ = 0;
unsigned char *str;
str_len--;
return FALSE;
for (i = 0; i < data_len; i++) {
return FALSE;
return TRUE;
unsigned char *chars;
unsigned int idx;
int level = 0;
level++;
goto found;
idx = 0;
goto found;
data++;
uid = 0;
for (; i < size; i++) {
unsigned int size)
unsigned int i, j, bytelen;
bytelen = 0;
i = char_lengths[0];
bytelen = 0;
unsigned int size)
unsigned char *dest;
for (i = 0; i < size; i++)
return dest;
const unsigned char *data;
unsigned int i, start = 0;
int ret = 0;
for (i = 0; i < size; i++) {
start++;
if (i != start) {
i - start) < 0) {
start = i;
start++;
if (i != start) {
return ret;
int ret;
return ret;
unsigned char *chars;
for (i = j = 0; i < orig_child_count; i++) {
for (i = j = 0; i < orig_child_count; i++) {
int ret;
if (child_count == 0) {
for (i = 0; i < child_count; i++) {
if (ret < 0)
int ret;
if (ret < 0)
static struct squat_trie_iterate_context *
return ctx;
return ret;
static struct squat_node *
int level;
return NULL;
return NULL;
return node;
static struct squat_node *
unsigned int count;
return NULL;
if (count == 0)
return NULL;
bool compress)
int ret = 0;
return ret;
&uids) < 0) {
return FALSE;
return FALSE;
return FALSE;
return TRUE;
int ret;
if (ret <= 0) {
if (ret < 0) {
bool changed;
int ret;
if (ret == 0) {
if (ret < 0)
const char *path;
if (ret <= 0) {
if (ret == 0)
if (ret == 0)
if (ret == 0) {
return ret;
if (ret < 0) {
if (ret < 0) {
return ret;
bool compress;
int ret;
if (ret == 0)
if (ret == 0)
return ret;
unsigned char *chars;
unsigned int idx;
int level = 0;
const unsigned char *str;
if (size == 0)
level++;
goto found;
idx = 0;
goto found;
uids) < 0)
data++;
size--;
if (count == 0)
for (i = 0; i < count; i++) {
struct squat_trie_lookup_context {
bool first;
unsigned int size)
int ret;
bytelen = 0;
if (ret <= 0) {
return ret;
i += char_lengths[i];
unsigned int count;
unsigned char *data;
int ret = 0;
i += bytes;
if (i != start) {
i - start);
if (start != 0) {
i - start);
if (ret > 0) {
i - start);
int ret;
return ret;