Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 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 |