idxview.c revision 2a6af811ea3de3cf9e2f15e446674dd21b0705f3
/* Copyright (C) 2007 Timo Sirainen */
#include "lib.h"
#include "array.h"
#include "str.h"
#include "hex-binary.h"
#include "mail-index-private.h"
#include "mail-cache-private.h"
#include "mail-transaction-log.h"
#include <stdio.h>
#include <stdlib.h>
static struct mail_index_header hdr;
static struct mail_cache_header cache_hdr;
static unsigned int cache_ext = (unsigned int)-1;
static unsigned int cache_search_offset = 0;
static int cache_fd = -1;
{
return 0;
}
{
}
{
const struct mail_index_ext_header *ext_hdr;
struct mail_index_ext ext;
char *base;
unsigned int i, offset, name_offset;
}
for (i = 0; i < 8; i++)
printf("no extensions\n");
return;
}
}
cache_ext = i;
printf("-- Extension %u --\n", i);
i++;
}
}
static void dump_cache_hdr(int fd)
{
struct mail_cache_header_fields fields;
struct mail_cache_field field;
char *buf;
const char *names;
unsigned int i;
}
printf("Cache header:\n");
printf("field_header_offset: %u / %u\n",
for (;;) {
i_fatal("cache file fields read() %"
}
if (next_offset == 0)
break;
}
printf("-- Cache fields: --\n");
}
i_fatal("Broken fields_count");
i_fatal("Fields go outside allocated size");
for (i = 0; i < fields.fields_count; i++) {
printf("%u: name=%s size=%u type=%u decision=%u last_used=%u\n",
}
}
{
const struct mail_cache_field *fields;
struct mail_cache_record rec;
char *buf;
return;
return;
}
return;
}
if (offset <= cache_search_offset &&
printf(" - SEARCH MATCH\n");
printf(" - cache at %u + %u (prev_offset = %u)\n",
if (idx >= cache_fields_count) {
printf("BROKEN: file_field = %u > %u\n",
return;
}
if (size == (unsigned int)-1) {
}
printf("BROKEN: record continues outside its allocated size\n");
return;
}
str_truncate(str, 0);
break;
}
case MAIL_CACHE_FIELD_BITMASK:
break;
case MAIL_CACHE_FIELD_STRING:
if (size > 0)
break;
case MAIL_CACHE_FIELD_HEADER: {
int i;
for (i = 0;; i++) {
if (i == 0 && size == 0) {
/* header doesn't exist */
break;
}
size = 0;
break;
}
if (lines[i] == 0)
break;
if (i > 0)
}
if (size > 0)
break;
}
case MAIL_CACHE_FIELD_COUNT:
i_unreached();
break;
}
}
}
{
const struct mail_index_ext *ext;
const void *ptr;
unsigned int i, ext_count;
if (ret == 0)
return 0;
}
for (i = 0; i < ext_count; i++) {
str_truncate(str, 0);
}
if (i == cache_ext)
}
return 1;
}
{
unsigned int seq;
void *buf;
lib_init();
if (argc < 2)
i_fatal("Usage: idxview dovecot.index [dovecot.index.cache]");
if (fd < 0) {
i_error("open(): %m");
return 1;
}
printf("---------------\n");
if (cache_fd < 0) {
i_error("open(): %m");
return 1;
}
printf("---------------\n");
}
seq = 1;
do {
t_push();
t_pop();
seq++;
} while (ret);
return 0;
}