[dovecot-cvs] dovecot/src/lib-index mail-index.c,1.173,1.174
cras at dovecot.org
cras at dovecot.org
Tue Nov 30 10:59:29 EET 2004
Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv17926/lib-index
Modified Files:
mail-index.c
Log Message:
With mmap_disabled=no the index header wasn't always updated causing various
problems.
Index: mail-index.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.173
retrieving revision 1.174
diff -u -d -r1.173 -r1.174
--- mail-index.c 29 Nov 2004 18:01:26 -0000 1.173
+++ mail-index.c 30 Nov 2004 08:59:26 -0000 1.174
@@ -371,6 +371,19 @@
mail_index_unmap(index, map);
}
+static void mail_index_map_copy_hdr(struct mail_index_map *map,
+ const struct mail_index_header *hdr)
+{
+ if (hdr->base_header_size < sizeof(map->hdr)) {
+ /* header smaller than ours, make a copy so our newer headers
+ won't have garbage in them */
+ memset(&map->hdr, 0, sizeof(map->hdr));
+ memcpy(&map->hdr, hdr, hdr->base_header_size);
+ } else {
+ map->hdr = *hdr;
+ }
+}
+
static int mail_index_mmap(struct mail_index *index, struct mail_index_map *map)
{
const struct mail_index_header *hdr;
@@ -421,14 +434,7 @@
return 0;
}
- if (hdr->base_header_size < sizeof(map->hdr)) {
- /* header smaller than ours, make a copy so our newer headers
- won't have garbage in them */
- memset(&map->hdr, 0, sizeof(map->hdr));
- memcpy(&map->hdr, hdr, hdr->base_header_size);
- } else {
- map->hdr = *hdr;
- }
+ mail_index_map_copy_hdr(map, hdr);
map->hdr_base = map->mmap_base;
map->records = PTR_OFFSET(map->mmap_base, map->hdr.header_size);
@@ -531,12 +537,7 @@
map->records = data;
map->records_count = hdr.messages_count;
- if (hdr.base_header_size >= sizeof(map->hdr))
- map->hdr = hdr;
- else {
- memset(&map->hdr, 0, sizeof(map->hdr));
- memcpy(&map->hdr, &hdr, hdr.base_header_size);
- }
+ mail_index_map_copy_hdr(map, &hdr);
map->hdr_base = map->hdr_copy_buf->data;
index->sync_log_file_seq = hdr.log_file_seq;
@@ -698,6 +699,7 @@
used_size = hdr->header_size + hdr->messages_count * hdr->record_size;
if (map->mmap_size >= used_size && map->hdr_base == hdr) {
map->records_count = hdr->messages_count;
+ mail_index_map_copy_hdr(map, hdr);
return 1;
}
return 0;
More information about the dovecot-cvs
mailing list