doveadm-dump-thread.c revision 7cb128dc4cae2a03a742f63ba7afee23c78e3af0
e59faf65ce864fe95dc00f5d52b8323cdbd0608aTimo Sirainen/* Copyright (c) 2007-2015 Dovecot authors, see the included COPYING file */
b28a1c61a5d262fd16b46bebe47dbfb90ac9c5fcTimo Sirainenstatic size_t dump_hdr(const struct mail_index_strmap_header *hdr)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen printf("uid validity = %u\n", hdr->uid_validity);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen return sizeof(*hdr);
a78d5bd9772681a232de56b3dd6acefee66cc71bTimo Sirainenstatic int dump_record(const uint8_t **p, const uint8_t *end, uint32_t *uid)
4e0204dbac352e271c79cfa6c74a71145a058de5Timo Sirainen /* <uid diff> <n> <crc32>*count <str_idx>*count */
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen if (mail_index_unpack_num(p, end, &uid_diff) < 0)
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen size = sizeof(crc32)*count + sizeof(idx)*count;
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen for (i = 0; i < count; i++) {
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen else if (i == 1) {
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen memcpy(&crc32, *p + sizeof(crc32)*i, sizeof(crc32));
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen memcpy(&idx, *p + sizeof(crc32)*count + sizeof(idx)*i, sizeof(idx));
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainenstatic int dump_block(const uint8_t *data, const uint8_t *end, uint32_t *uid)
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen memcpy(&block_size, data, sizeof(block_size));
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen block_size = mail_index_offset_to_uint32(block_size) >> 2;
28cb56e6957f06717e876cecb7aabc820fdf632eTimo Sirainen /* finished */
b28a1c61a5d262fd16b46bebe47dbfb90ac9c5fcTimo Sirainen if (data + sizeof(block_size) + block_size > end) {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen while (p != end) {
3c3777721b56e065fac99a0f34e4cef4f293b517Timo Sirainenstatic void cmd_dump_thread(int argc ATTR_UNUSED, char *argv[])
b28a1c61a5d262fd16b46bebe47dbfb90ac9c5fcTimo Sirainen unsigned int pos;
bbc30fd4fa86723f6a72309ad3a2a96f34eabd6cTimo Sirainen map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
1358e2c58ce29231485a5cfa454756d429ad3d2cTimo Sirainen ret = dump_block(CONST_PTR_OFFSET(map, pos), end, &uid);
1358e2c58ce29231485a5cfa454756d429ad3d2cTimo Sirainen } while (ret > 0);
1cfdcb36985904eff281fc6d7ea2d13b3c375980Timo Sirainen const char *p;
1358e2c58ce29231485a5cfa454756d429ad3d2cTimo Sirainen return p != NULL && strcmp(p, ".thread") == 0;