annotate src/lib-index/mailbox-list-index-private.h @ 9191:b340ecb24469 HEAD

Fix VPATH build of RQUOTA support. Some rpcgen derive #include "..." paths from the infile argument. This will be off for VPATH builds, as the generated rquota_xdr.c code will look in $(srcdir), but we'll generate the rquota.h file in $(builddir). Play safe and copy rquota.x to $(builddir) first. This fixes the build on openSUSE 11.1.
author Matthias Andree <matthias.andree@gmx.de>
date Tue, 07 Jul 2009 21:01:36 +0200
parents 37e118a32cd0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6410
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 6101
diff changeset
1 #ifndef MAILBOX_LIST_INDEX_PRIVATE_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 6101
diff changeset
2 #define MAILBOX_LIST_INDEX_PRIVATE_H
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
4968
1baf9dd3fc40 Added dotlock_use_excl setting.
Timo Sirainen <tss@iki.fi>
parents: 4929
diff changeset
4 #include "file-dotlock.h"
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "mailbox-list-index.h"
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #define MAILBOX_LIST_INDEX_MAJOR_VERSION 1
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #define MAILBOX_LIST_INDEX_MINOR_VERSION 0
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
4929
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
10 #define MAILBOX_LIST_COMPRESS_PERCENTAGE 10
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
11 #define MAILBOX_LIST_COMPRESS_MIN_SIZE 1024
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
12
6101
6805ccf0b82e mmap() mailbox list index only if it's at least 32kB
Timo Sirainen <tss@iki.fi>
parents: 6086
diff changeset
13 #define MAILBOX_LIST_INDEX_MMAP_MIN_SIZE (1024*32)
6805ccf0b82e mmap() mailbox list index only if it's at least 32kB
Timo Sirainen <tss@iki.fi>
parents: 6086
diff changeset
14
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 struct mailbox_list_index_header {
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 uint8_t major_version;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 uint8_t minor_version;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 uint8_t unused[2];
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
6086
e562c6359cd1 Added increasing file_seq field to list index.
Timo Sirainen <tss@iki.fi>
parents: 6076
diff changeset
20 uint32_t file_seq;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 uint32_t header_size;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 uint32_t uid_validity;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 /* locking required to access the fields below: */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 uint32_t next_uid;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 uint32_t used_space;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 uint32_t deleted_space;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 struct mailbox_list_dir_record {
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 /* If non-zero, contains a pointer to updated directory list.
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 Stored using mail_index_uint32_to_offset(). */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 uint32_t next_offset;
8742
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
35 /* Bytes required to be able to fully read this directory's records.
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
36 This includes also bytes used by mailbox names that follow the
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
37 records (but doesn't include bytes for mailbox names that point
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
38 to earlier offsets in the file). */
5343
cdf39128dd91 More desyncing fixes
Timo Sirainen <tss@iki.fi>
parents: 5324
diff changeset
39 uint32_t dir_size;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 uint32_t count;
8742
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
42 /* The records are sorted 1) by their name_hash, 2) the actual name */
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 /* struct mailbox_list_record records[count]; */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 struct mailbox_list_record {
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 /* CRC32 hash of the name */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 uint32_t name_hash;
8742
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
49 unsigned int uid:31;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 /* Set when this record has been marked as deleted. It will be removed
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 permanently the next time a new record is added to this directory
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 or on the next index compression. */
8742
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
53 unsigned int deleted:1;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 /* Points to a NUL-terminated record name */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 uint32_t name_offset;
8742
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
57 /* Pointer to child mailboxes or 0 if there are no children.
37e118a32cd0 Minor changes to mailbox list indexing code. Still disabled/non-working.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
58 The offset is stored using mail_index_uint32_to_offset()
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 since it may change while we're reading */
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 uint32_t dir_offset;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 struct mailbox_list_index {
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 char *filepath;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 char separator;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 struct mail_index *mail_index;
4896
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
67 struct file_cache *file_cache;
4968
1baf9dd3fc40 Added dotlock_use_excl setting.
Timo Sirainen <tss@iki.fi>
parents: 4929
diff changeset
68 struct dotlock_settings dotlock_set;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 int fd;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 void *mmap_base;
4896
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
73 const void *const_mmap_base;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 size_t mmap_size;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 const struct mailbox_list_index_header *hdr;
4896
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
76
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
77 unsigned int mmap_disable:1;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 #define MAILBOX_LIST_RECORDS(dir) \
4896
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
81 ((const struct mailbox_list_record *)(dir + 1))
3d00a9636393 Mailbox list index works now with mmap_disable=yes.
Timo Sirainen <tss@iki.fi>
parents: 4848
diff changeset
82 #define MAILBOX_LIST_RECORDS_MODIFIABLE(dir) \
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 ((struct mailbox_list_record *)(dir + 1))
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 #define MAILBOX_LIST_RECORD_IDX(dir, rec) \
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 ((rec) - MAILBOX_LIST_RECORDS(dir))
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 int mailbox_list_index_set_syscall_error(struct mailbox_list_index *index,
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 const char *function);
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 int mailbox_list_index_dir_lookup_rec(struct mailbox_list_index *index,
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 const struct mailbox_list_dir_record *dir,
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 const char *name,
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 const struct mailbox_list_record **rec_r);
5324
4d3294c59939 Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents: 4968
diff changeset
94 int mailbox_list_index_get_dir(struct mailbox_list_index_view *view,
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 uint32_t *offset,
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 const struct mailbox_list_dir_record **dir_r);
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 int mailbox_list_index_map(struct mailbox_list_index *index);
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98
4929
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
99 int mailbox_list_index_file_create(struct mailbox_list_index *index,
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
100 uint32_t uid_validity);
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
101 void mailbox_list_index_file_close(struct mailbox_list_index *index);
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
102
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
103 int mailbox_list_index_refresh(struct mailbox_list_index *index);
791c9c8d3a02 Compress list index when its deleted space amount gets too high. Also fixed
Timo Sirainen <tss@iki.fi>
parents: 4896
diff changeset
104
6076
f1f83c90fd3d Moved mailbox_list_index_set_corrupted() to private .h file
Timo Sirainen <tss@iki.fi>
parents: 5343
diff changeset
105 int mailbox_list_index_set_corrupted(struct mailbox_list_index *index,
f1f83c90fd3d Moved mailbox_list_index_set_corrupted() to private .h file
Timo Sirainen <tss@iki.fi>
parents: 5343
diff changeset
106 const char *str);
f1f83c90fd3d Moved mailbox_list_index_set_corrupted() to private .h file
Timo Sirainen <tss@iki.fi>
parents: 5343
diff changeset
107
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 #endif