Cross Reference: /dovecot/src/doveadm/doveadm-print-tab.c
doveadm-print-tab.c revision ce9619645e0ec302c208690e9f9bc65037c05196
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
7cb128dc4cae2a03a742f63ba7afee23c78e3af0Phil Carmody/* Copyright (c) 2010-2015 Dovecot authors, see the included COPYING file */
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "lib.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "array.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "doveadm-print-private.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include <stdio.h>
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstruct doveadm_print_tab_context {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen unsigned int header_idx, header_count;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen unsigned int header_written:1;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen};
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic struct doveadm_print_tab_context ctx;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainenstatic void doveadm_print_tab_flush_header(void)
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen{
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen if (!ctx.header_written) {
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen if (!doveadm_print_hide_titles)
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen printf("\n");
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen ctx.header_written = TRUE;
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen }
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen}
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic void
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainendoveadm_print_tab_header(const struct doveadm_print_header *hdr)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (ctx.header_count++ > 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\t");
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen if (!doveadm_print_hide_titles)
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen printf("%s", hdr->title);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic void doveadm_print_tab_print(const char *value)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen doveadm_print_tab_flush_header();
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (ctx.header_idx > 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\t");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("%s", value);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
505031653de36a8ec45a45e23a42937966327618Timo Sirainen if (++ctx.header_idx == ctx.header_count) {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen ctx.header_idx = 0;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\n");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen }
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainenstatic void
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainendoveadm_print_tab_print_stream(const unsigned char *value, size_t size)
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen{
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen if (size == 0) {
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen doveadm_print_tab_print("");
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen return;
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen }
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen doveadm_print_tab_flush_header();
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen if (ctx.header_idx > 0)
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen printf("\t");
80fbf2394fb1071e2bcc50a8c1da1fe876a961a2Timo Sirainen fwrite(value, 1, size, stdout);
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen}
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainenstatic void doveadm_print_tab_flush(void)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
ce9619645e0ec302c208690e9f9bc65037c05196Timo Sirainen doveadm_print_tab_flush_header();
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstruct doveadm_print_vfuncs doveadm_print_tab_vfuncs = {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen "tab",
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen NULL,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen NULL,
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_tab_header,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen doveadm_print_tab_print,
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen doveadm_print_tab_print_stream,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen doveadm_print_tab_flush
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen};