Coverage Report

Created: 2026-06-07 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/fluent-bit/lib/librdkafka-2.10.1/src/rdlog.c
Line
Count
Source
1
/*
2
 * librd - Rapid Development C library
3
 *
4
 * Copyright (c) 2012-2022, Magnus Edenhill
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions are met:
9
 *
10
 * 1. Redistributions of source code must retain the above copyright notice,
11
 *    this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright notice,
13
 *    this list of conditions and the following disclaimer in the documentation
14
 *    and/or other materials provided with the distribution.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
 * POSSIBILITY OF SUCH DAMAGE.
27
 */
28
29
#include "rdkafka_int.h"
30
#include "rdlog.h"
31
32
#include <stdarg.h>
33
#include <string.h>
34
#include <ctype.h>
35
36
37
38
0
void rd_hexdump(FILE *fp, const char *name, const void *ptr, size_t len) {
39
0
        const char *p = (const char *)ptr;
40
0
        size_t of     = 0;
41
42
43
0
        if (name)
44
0
                fprintf(fp, "%s hexdump (%" PRIusz " bytes):\n", name, len);
45
46
0
        for (of = 0; of < len; of += 16) {
47
0
                char hexen[16 * 3 + 1];
48
0
                char charen[16 + 1];
49
0
                int hof = 0;
50
51
0
                int cof = 0;
52
0
                unsigned int i;
53
54
0
                for (i = (unsigned int)of; i < (unsigned int)of + 16 && i < len;
55
0
                     i++) {
56
0
                        hof += rd_snprintf(hexen + hof, sizeof(hexen) - hof,
57
0
                                           "%02x ", p[i] & 0xff);
58
0
                        cof +=
59
0
                            rd_snprintf(charen + cof, sizeof(charen) - cof,
60
0
                                        "%c", isprint((int)p[i]) ? p[i] : '.');
61
0
                }
62
0
                fprintf(fp, "%08zx: %-48s %-16s\n", of, hexen, charen);
63
0
        }
64
0
}
65
66
67
void rd_iov_print(const char *what,
68
                  int iov_idx,
69
                  const struct iovec *iov,
70
0
                  int hexdump) {
71
0
        printf("%s:  iov #%i: %" PRIusz "\n", what, iov_idx,
72
0
               (size_t)iov->iov_len);
73
0
        if (hexdump)
74
0
                rd_hexdump(stdout, what, iov->iov_base, iov->iov_len);
75
0
}
76
77
78
0
void rd_msghdr_print(const char *what, const struct msghdr *msg, int hexdump) {
79
0
        int i;
80
0
        size_t len = 0;
81
82
0
        printf("%s: iovlen %" PRIusz "\n", what, (size_t)msg->msg_iovlen);
83
84
0
        for (i = 0; i < (int)msg->msg_iovlen; i++) {
85
0
                rd_iov_print(what, i, &msg->msg_iov[i], hexdump);
86
0
                len += msg->msg_iov[i].iov_len;
87
0
        }
88
0
        printf("%s: ^ message was %" PRIusz " bytes in total\n", what, len);
89
0
}