logview.c revision 85144b5f0bc763de14c7d87291a90ef74ac241a2
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek/* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekstatic struct mail_transaction_ext_intro prev_intro;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekuint32_t mail_index_offset_to_uint32(uint32_t offset)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek const unsigned char *buf = (const unsigned char *) &offset;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekstatic void dump_hdr(int fd, uint64_t *modseq_r)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek i_fatal("file hdr read() %"PRIuSIZE_T" != %"PRIuSIZE_T,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek printf("version = %u.%u\n", hdr.major_version, hdr.minor_version);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek printf("prev file = %u/%u\n", hdr.prev_file_seq, hdr.prev_file_offset);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek printf("create stamp = %u\n", hdr.create_stamp);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekmail_transaction_header_has_modseq(const struct mail_transaction_header *hdr)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek switch (hdr->type & MAIL_TRANSACTION_TYPE_MASK) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek case MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_EXPUNGE_PROT:
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek if ((hdr->type & MAIL_TRANSACTION_EXTERNAL) == 0) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek /* ignore expunge requests */
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek /* these changes increase modseq */
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekstatic const char *log_record_type(unsigned int type)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek const char *name;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek case MAIL_TRANSACTION_EXPUNGE|MAIL_TRANSACTION_EXPUNGE_PROT:
return name;
size_t i;
for (i = 0; i < size; i++)
size_t i;
switch (size) {
for (i = 0; i < size; i++)
const char *name;
} header_fields[] = {
while (size > 0) {
unknown/unexpected fields offsets/sizes */
case MAIL_TRANSACTION_APPEND: {
case MAIL_TRANSACTION_FLAG_UPDATE: {
case MAIL_TRANSACTION_HEADER_UPDATE: {
case MAIL_TRANSACTION_EXT_INTRO: {
case MAIL_TRANSACTION_EXT_RESET: {
case MAIL_TRANSACTION_EXT_HDR_UPDATE: {
case MAIL_TRANSACTION_EXT_REC_UPDATE: {
case MAIL_TRANSACTION_KEYWORD_UPDATE: {
unsigned int uid_offset;
case MAIL_TRANSACTION_KEYWORD_RESET: {
unsigned int orig_size;
if (ret == 0)
lib_init();
if (fd < 0) {
T_BEGIN {
} T_END;
} while (ret > 0);