squat-trie.c revision ed4bd0ef77522f567c493d3ca5c71c78f20b7320
905N/A#include "read-full.h"
905N/A#include "nfs-workarounds.h"
905N/A#include "file-cache.h"
905N/A#include "seq-range-array.h"
905N/A#include "squat-uidlist.h"
905N/A#include "squat-trie-private.h"
905N/A#define DEFAULT_NORMALIZE_MAP_CHARS \
905N/A#define TRIE_BYTES_LEFT(n) \
905N/A ((n) * SQUAT_PACK_MAX_SIZE)
4448N/A#define TRIE_READAHEAD_SIZE \
4448N/Astruct squat_trie_build_context {
4448N/Astruct squat_trie_iterate_node {
905N/Astruct squat_trie_iterate_context {
static unsigned char valid_chars[] =
struct squat_trie *
return trie;
int ret;
if (ret > 0)
return ret;
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;
leafstr_len--;
T_BEGIN {
} T_END;
return FALSE;
for (i = 0; i < data_len; i++) {
T_BEGIN {
} T_END;
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++) {
dest[i++] = 0;
dest[i++] = 0;
dest[i] = 0;
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 = 0;
} T_END;
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++) {
T_BEGIN {
} T_END;
if (ret < 0)
int ret;
T_BEGIN {
} T_END;
if (ret < 0)
static struct squat_trie_iterate_context *
return ctx;
return ret;
static struct squat_node *
return NULL;
static struct squat_node *
if (count == 0)
return NULL;
if (shift_count != 0)
(i == shift_count ||
if (uid_idx > 0 &&
&uid_count);
if (uid_idx == 0)
uid_idx++;
&uid_count);
} else if (do_shifts) {
&uid_count);
if (!do_shifts) {
shift_sum = 0;
if (uid_count == 0) {
if (do_shifts)
int ret = 0;
&uid_range) < 0) {
shift);
return ret;
int ret = 0;
return ret;
bool compress)
int ret = 0;
return ret;
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)
int fd;
return fd;
const char *path;
&file_lock);
if (ret <= 0) {
if (ret == 0) {
path);
if (ret == 0)
if (ret == 0) {
return ret;
if (ret < 0) {
if (ret < 0) {
return ret;
int ret;
if (ret == 0) {
if (ret < 0)
if (ret == 0)
if (unlock)
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;
i += char_lengths[i];
i = 0; char_idx = 0;
bytelen = 0;
if (ret <= 0) {
return ret;
i += char_lengths[i];
char_idx++;
unsigned int count;
unsigned char *data;
int ret = 0;
i += bytes;
if (i != start) {
i - start);
if (start == 0) {
if (ret > 0) {
i - start);
} else if (str_bytelen > 0) {
i - start);
} else if (!searched) {
i_unreached();
int ret;
T_BEGIN {
} T_END;
return ret;