Coverage Report

Created: 2024-09-08 06:18

/src/bloaty/third_party/capstone/SStream.c
Line
Count
Source (jump to first uncovered line)
1
/* Capstone Disassembly Engine */
2
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
3
4
#include <stdarg.h>
5
#if defined(CAPSTONE_HAS_OSXKERNEL)
6
#include <Availability.h>
7
#include <libkern/libkern.h>
8
#include <i386/limits.h>
9
#else
10
#include <stdio.h>
11
#include <limits.h>
12
#endif
13
#include <string.h>
14
15
#include <capstone/platform.h>
16
17
#include "SStream.h"
18
#include "cs_priv.h"
19
#include "utils.h"
20
21
#ifdef _MSC_VER
22
#pragma warning(disable: 4996) // disable MSVC's warning on strcpy()
23
#endif
24
25
void SStream_Init(SStream *ss)
26
26.2M
{
27
26.2M
  ss->index = 0;
28
26.2M
  ss->buffer[0] = '\0';
29
26.2M
}
30
31
void SStream_concat0(SStream *ss, const char *s)
32
141M
{
33
141M
#ifndef CAPSTONE_DIET
34
141M
  unsigned int len = (unsigned int) strlen(s);
35
36
141M
  memcpy(ss->buffer + ss->index, s, len);
37
141M
  ss->index += len;
38
141M
  ss->buffer[ss->index] = '\0';
39
141M
#endif
40
141M
}
41
42
void SStream_concat(SStream *ss, const char *fmt, ...)
43
7.27M
{
44
7.27M
#ifndef CAPSTONE_DIET
45
7.27M
  va_list ap;
46
7.27M
  int ret;
47
48
7.27M
  va_start(ap, fmt);
49
7.27M
  ret = cs_vsnprintf(ss->buffer + ss->index, sizeof(ss->buffer) - (ss->index + 1), fmt, ap);
50
7.27M
  va_end(ap);
51
7.27M
  ss->index += ret;
52
7.27M
#endif
53
7.27M
}
54
55
// print number with prefix #
56
void printInt64Bang(SStream *O, int64_t val)
57
0
{
58
0
  if (val >= 0) {
59
0
    if (val > HEX_THRESHOLD)
60
0
      SStream_concat(O, "#0x%"PRIx64, val);
61
0
    else
62
0
      SStream_concat(O, "#%"PRIu64, val);
63
0
  } else {
64
0
    if (val <- HEX_THRESHOLD) {
65
0
      if (val == LONG_MIN)
66
0
        SStream_concat(O, "#-0x%"PRIx64, (uint64_t)val);
67
0
      else
68
0
        SStream_concat(O, "#-0x%"PRIx64, (uint64_t)-val);
69
0
    }
70
0
    else
71
0
      SStream_concat(O, "#-%"PRIu64, -val);
72
0
  }
73
0
}
74
75
void printUInt64Bang(SStream *O, uint64_t val)
76
0
{
77
0
  if (val > HEX_THRESHOLD)
78
0
    SStream_concat(O, "#0x%"PRIx64, val);
79
0
  else
80
0
    SStream_concat(O, "#%"PRIu64, val);
81
0
}
82
83
// print number
84
void printInt64(SStream *O, int64_t val)
85
0
{
86
0
  if (val >= 0) {
87
0
    if (val > HEX_THRESHOLD)
88
0
      SStream_concat(O, "0x%"PRIx64, val);
89
0
    else
90
0
      SStream_concat(O, "%"PRIu64, val);
91
0
  } else {
92
0
    if (val <- HEX_THRESHOLD) {
93
0
      if (val == LONG_MIN)
94
0
        SStream_concat(O, "-0x%"PRIx64, (uint64_t)val);
95
0
      else
96
0
        SStream_concat(O, "-0x%"PRIx64, (uint64_t)-val);
97
0
    }
98
0
    else
99
0
      SStream_concat(O, "-%"PRIu64, -val);
100
0
  }
101
0
}
102
103
// print number in decimal mode
104
void printInt32BangDec(SStream *O, int32_t val)
105
0
{
106
0
  if (val >= 0)
107
0
    SStream_concat(O, "#%u", val);
108
0
  else
109
0
    if (val == INT_MIN)
110
0
      SStream_concat(O, "#-%u", val);
111
0
    else
112
0
      SStream_concat(O, "#-%u", (uint32_t)-val);
113
0
}
114
115
void printInt32Bang(SStream *O, int32_t val)
116
0
{
117
0
  if (val >= 0) {
118
0
    if (val > HEX_THRESHOLD)
119
0
      SStream_concat(O, "#0x%x", val);
120
0
    else
121
0
      SStream_concat(O, "#%u", val);
122
0
  } else {
123
0
    if (val <- HEX_THRESHOLD) {
124
0
      if (val == INT_MIN)
125
0
        SStream_concat(O, "#-0x%x", (uint32_t)val);
126
0
      else
127
0
        SStream_concat(O, "#-0x%x", (uint32_t)-val);
128
0
    }
129
0
    else
130
0
      SStream_concat(O, "#-%u", -val);
131
0
  }
132
0
}
133
134
void printInt32(SStream *O, int32_t val)
135
0
{
136
0
  if (val >= 0) {
137
0
    if (val > HEX_THRESHOLD)
138
0
      SStream_concat(O, "0x%x", val);
139
0
    else
140
0
      SStream_concat(O, "%u", val);
141
0
  } else {
142
0
    if (val <- HEX_THRESHOLD) {
143
0
      if (val == INT_MIN)
144
0
        SStream_concat(O, "-0x%x", (uint32_t)val);
145
0
      else
146
0
        SStream_concat(O, "-0x%x", (uint32_t)-val);
147
0
      }
148
0
    else
149
0
      SStream_concat(O, "-%u", -val);
150
0
  }
151
0
}
152
153
void printUInt32Bang(SStream *O, uint32_t val)
154
0
{
155
0
  if (val > HEX_THRESHOLD)
156
0
    SStream_concat(O, "#0x%x", val);
157
0
  else
158
0
    SStream_concat(O, "#%u", val);
159
0
}
160
161
void printUInt32(SStream *O, uint32_t val)
162
0
{
163
0
  if (val > HEX_THRESHOLD)
164
0
    SStream_concat(O, "0x%x", val);
165
0
  else
166
0
    SStream_concat(O, "%u", val);
167
0
}
168
169
/*
170
   int main()
171
   {
172
   SStream ss;
173
   int64_t i;
174
175
   SStream_Init(&ss);
176
177
   SStream_concat(&ss, "hello ");
178
   SStream_concat(&ss, "%d - 0x%x", 200, 16);
179
180
   i = 123;
181
   SStream_concat(&ss, " + %ld", i);
182
   SStream_concat(&ss, "%s", "haaaaa");
183
184
   printf("%s\n", ss.buffer);
185
186
   return 0;
187
   }
188
 */