dovecot: Moved mail_index_map_parse_keywords() to mail-index-map.c

dovecot at dovecot.org dovecot at dovecot.org
Sat Sep 15 10:12:02 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/12d4b757b825
changeset: 6378:12d4b757b825
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Sep 15 10:11:58 2007 +0300
description:
Moved mail_index_map_parse_keywords() to mail-index-map.c

diffstat:

2 files changed, 108 insertions(+), 108 deletions(-)
src/lib-index/mail-index-map.c |  108 ++++++++++++++++++++++++++++++++++++++++
src/lib-index/mail-index.c     |  108 ----------------------------------------

diffs (236 lines):

diff -r 29f427039e00 -r 12d4b757b825 src/lib-index/mail-index-map.c
--- a/src/lib-index/mail-index-map.c	Sat Sep 15 10:05:56 2007 +0300
+++ b/src/lib-index/mail-index-map.c	Sat Sep 15 10:11:58 2007 +0300
@@ -209,6 +209,114 @@ static int mail_index_parse_extensions(s
 	return 0;
 }
 
+int mail_index_map_parse_keywords(struct mail_index_map *map)
+{
+	struct mail_index *index = map->index;
+	const struct mail_index_ext *ext;
+	const struct mail_index_keyword_header *kw_hdr;
+	const struct mail_index_keyword_header_rec *kw_rec;
+	const char *name;
+	unsigned int i, name_area_end_offset, old_count;
+	uint32_t idx;
+
+	if (!mail_index_map_lookup_ext(map, "keywords", &idx)) {
+		if (array_is_created(&map->keyword_idx_map))
+			array_clear(&map->keyword_idx_map);
+		return 0;
+	}
+	ext = array_idx(&map->extensions, idx);
+
+	/* Extension header contains:
+	   - struct mail_index_keyword_header
+	   - struct mail_index_keyword_header_rec * keywords_count
+	   - const char names[] * keywords_count
+	*/
+	i_assert(ext->hdr_offset < map->hdr.header_size);
+	kw_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+	kw_rec = (const void *)(kw_hdr + 1);
+	name = (const char *)(kw_rec + kw_hdr->keywords_count);
+
+	old_count = !array_is_created(&map->keyword_idx_map) ? 0 :
+		array_count(&map->keyword_idx_map);
+
+	/* Keywords can only be added into same mapping. Removing requires a
+	   new mapping (recreating the index file) */
+	if (kw_hdr->keywords_count == old_count) {
+		/* nothing changed */
+		return 0;
+	}
+
+	/* make sure the header is valid */
+	if (kw_hdr->keywords_count < old_count) {
+		mail_index_set_error(index, "Corrupted index file %s: "
+				     "Keywords removed unexpectedly",
+				     index->filepath);
+		return -1;
+	}
+
+	if ((size_t)(name - (const char *)kw_hdr) > ext->hdr_size) {
+		mail_index_set_error(index, "Corrupted index file %s: "
+				     "keywords_count larger than header size",
+				     index->filepath);
+		return -1;
+	}
+
+	name_area_end_offset = (const char *)kw_hdr + ext->hdr_size - name;
+	for (i = 0; i < kw_hdr->keywords_count; i++) {
+		if (kw_rec[i].name_offset > name_area_end_offset) {
+			mail_index_set_error(index, "Corrupted index file %s: "
+				"name_offset points outside allocated header",
+				index->filepath);
+			return -1;
+		}
+	}
+	if (name[name_area_end_offset-1] != '\0') {
+		mail_index_set_error(index, "Corrupted index file %s: "
+				     "Keyword header doesn't end with NUL",
+				     index->filepath);
+		return -1;
+	}
+
+	/* create file -> index mapping */
+	if (!array_is_created(&map->keyword_idx_map)) 
+		i_array_init(&map->keyword_idx_map, kw_hdr->keywords_count);
+
+#ifdef DEBUG
+	/* Check that existing headers are still the same. It's behind DEBUG
+	   since it's pretty useless waste of CPU normally. */
+	for (i = 0; i < array_count(&map->keyword_idx_map); i++) {
+		const char *keyword = name + kw_rec[i].name_offset;
+		const unsigned int *old_idx;
+		unsigned int idx;
+
+		old_idx = array_idx(&map->keyword_idx_map, i);
+		if (!mail_index_keyword_lookup(index, keyword, &idx) ||
+		    idx != *old_idx) {
+			mail_index_set_error(index, "Corrupted index file %s: "
+					     "Keywords changed unexpectedly",
+					     index->filepath);
+			return -1;
+		}
+	}
+#endif
+	/* Register the newly seen keywords */
+	i = array_count(&map->keyword_idx_map);
+	for (; i < kw_hdr->keywords_count; i++) {
+		const char *keyword = name + kw_rec[i].name_offset;
+		unsigned int idx;
+
+		if (*keyword == '\0') {
+			mail_index_set_error(index, "Corrupted index file %s: "
+				"Empty keyword name in header",
+				index->filepath);
+			return -1;
+		}
+		mail_index_keyword_lookup_or_create(index, keyword, &idx);
+		array_append(&map->keyword_idx_map, &idx, 1);
+	}
+	return 0;
+}
+
 static bool mail_index_check_header_compat(struct mail_index *index,
 					   const struct mail_index_header *hdr,
 					   uoff_t file_size)
diff -r 29f427039e00 -r 12d4b757b825 src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Sat Sep 15 10:05:56 2007 +0300
+++ b/src/lib-index/mail-index.c	Sat Sep 15 10:11:58 2007 +0300
@@ -216,114 +216,6 @@ void mail_index_keyword_lookup_or_create
 	array_append(&index->keywords, &keyword, 1);
 }
 
-int mail_index_map_parse_keywords(struct mail_index_map *map)
-{
-	struct mail_index *index = map->index;
-	const struct mail_index_ext *ext;
-	const struct mail_index_keyword_header *kw_hdr;
-	const struct mail_index_keyword_header_rec *kw_rec;
-	const char *name;
-	unsigned int i, name_area_end_offset, old_count;
-	uint32_t idx;
-
-	if (!mail_index_map_lookup_ext(map, "keywords", &idx)) {
-		if (array_is_created(&map->keyword_idx_map))
-			array_clear(&map->keyword_idx_map);
-		return 0;
-	}
-	ext = array_idx(&map->extensions, idx);
-
-	/* Extension header contains:
-	   - struct mail_index_keyword_header
-	   - struct mail_index_keyword_header_rec * keywords_count
-	   - const char names[] * keywords_count
-	*/
-	i_assert(ext->hdr_offset < map->hdr.header_size);
-	kw_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
-	kw_rec = (const void *)(kw_hdr + 1);
-	name = (const char *)(kw_rec + kw_hdr->keywords_count);
-
-	old_count = !array_is_created(&map->keyword_idx_map) ? 0 :
-		array_count(&map->keyword_idx_map);
-
-	/* Keywords can only be added into same mapping. Removing requires a
-	   new mapping (recreating the index file) */
-	if (kw_hdr->keywords_count == old_count) {
-		/* nothing changed */
-		return 0;
-	}
-
-	/* make sure the header is valid */
-	if (kw_hdr->keywords_count < old_count) {
-		mail_index_set_error(index, "Corrupted index file %s: "
-				     "Keywords removed unexpectedly",
-				     index->filepath);
-		return -1;
-	}
-
-	if ((size_t)(name - (const char *)kw_hdr) > ext->hdr_size) {
-		mail_index_set_error(index, "Corrupted index file %s: "
-				     "keywords_count larger than header size",
-				     index->filepath);
-		return -1;
-	}
-
-	name_area_end_offset = (const char *)kw_hdr + ext->hdr_size - name;
-	for (i = 0; i < kw_hdr->keywords_count; i++) {
-		if (kw_rec[i].name_offset > name_area_end_offset) {
-			mail_index_set_error(index, "Corrupted index file %s: "
-				"name_offset points outside allocated header",
-				index->filepath);
-			return -1;
-		}
-	}
-	if (name[name_area_end_offset-1] != '\0') {
-		mail_index_set_error(index, "Corrupted index file %s: "
-				     "Keyword header doesn't end with NUL",
-				     index->filepath);
-		return -1;
-	}
-
-	/* create file -> index mapping */
-	if (!array_is_created(&map->keyword_idx_map)) 
-		i_array_init(&map->keyword_idx_map, kw_hdr->keywords_count);
-
-#ifdef DEBUG
-	/* Check that existing headers are still the same. It's behind DEBUG
-	   since it's pretty useless waste of CPU normally. */
-	for (i = 0; i < array_count(&map->keyword_idx_map); i++) {
-		const char *keyword = name + kw_rec[i].name_offset;
-		const unsigned int *old_idx;
-		unsigned int idx;
-
-		old_idx = array_idx(&map->keyword_idx_map, i);
-		if (!mail_index_keyword_lookup(index, keyword, &idx) ||
-		    idx != *old_idx) {
-			mail_index_set_error(index, "Corrupted index file %s: "
-					     "Keywords changed unexpectedly",
-					     index->filepath);
-			return -1;
-		}
-	}
-#endif
-	/* Register the newly seen keywords */
-	i = array_count(&map->keyword_idx_map);
-	for (; i < kw_hdr->keywords_count; i++) {
-		const char *keyword = name + kw_rec[i].name_offset;
-		unsigned int idx;
-
-		if (*keyword == '\0') {
-			mail_index_set_error(index, "Corrupted index file %s: "
-				"Empty keyword name in header",
-				index->filepath);
-			return -1;
-		}
-		mail_index_keyword_lookup_or_create(index, keyword, &idx);
-		array_append(&map->keyword_idx_map, &idx, 1);
-	}
-	return 0;
-}
-
 const ARRAY_TYPE(keywords) *mail_index_get_keywords(struct mail_index *index)
 {
 	return &index->keywords;


More information about the dovecot-cvs mailing list