Skip to content

Commit 0a08fa2

Browse files
committed
Add support for binary specs, many other changes
1 parent 740d59a commit 0a08fa2

File tree

6 files changed

+269
-201
lines changed

6 files changed

+269
-201
lines changed

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CC=clang
1+
CC?=clang
22

33
SRCS=parse_printf.c example.c test.c
44
OBJS=$(SRCS:.c=.o)
@@ -42,7 +42,7 @@ $(DEBUG_TARGET): $(DEBUG_OBJS)
4242
@$(CC) $(DEBUG_CFLAGS) -c $< -o $@
4343

4444
compile_commands: clean
45-
@bear -- make
45+
compiledb make
4646

4747
print_info:
4848
@echo $(OBJS)

example.c

+33-31
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,50 @@
1+
#include <string.h>
2+
13
#include "example.h"
24
#include "parse_printf.h"
35

46
struct callback_info {
57
char *buffer_in;
6-
uint64_t buffer_used;
7-
uint64_t buffer_size;
8+
uint32_t buffer_used;
9+
uint32_t buffer_size;
810
};
911

10-
uint64_t
12+
uint32_t
1113
format_to_buffer(char *const buffer_in,
12-
const uint64_t buffer_len,
14+
const uint32_t buffer_len,
1315
const char *const format,
1416
...)
1517
{
1618
va_list list;
1719
va_start(list, format);
1820

19-
const uint64_t result =
21+
const uint32_t result =
2022
vformat_to_buffer(buffer_in, buffer_len, format, list);
2123

2224
va_end(list);
2325
return result;
2426
}
2527

26-
static uint64_t
28+
static uint32_t
2729
format_to_buffer_write_ch_callback(
28-
const struct printf_spec_info *const spec_info,
30+
struct printf_spec_info *const spec_info,
2931
void *const info,
3032
const char ch,
31-
uint64_t amount,
33+
uint32_t amount,
3234
bool *const should_continue_out)
3335
{
3436
(void)spec_info;
3537

3638
struct callback_info *const cb_info = (struct callback_info *)info;
37-
const uint64_t old_used = cb_info->buffer_used;
39+
const uint32_t old_used = cb_info->buffer_used;
3840

39-
uint64_t new_used = old_used;
41+
uint32_t new_used = old_used;
4042
if (__builtin_add_overflow(new_used, amount, &new_used)) {
4143
*should_continue_out = false;
4244
return 0;
4345
}
4446

45-
const uint64_t buffer_size = cb_info->buffer_size;
47+
const uint32_t buffer_size = cb_info->buffer_size;
4648
if (new_used >= buffer_size) {
4749
/*
4850
* Truncate amount to just the space left if we don't have enough space
@@ -61,27 +63,27 @@ format_to_buffer_write_ch_callback(
6163
return amount;
6264
}
6365

64-
static uint64_t
66+
static uint32_t
6567
format_to_buffer_write_string_callback(
66-
const struct printf_spec_info *const spec_info,
68+
struct printf_spec_info *const spec_info,
6769
void *const info,
6870
const char *const string,
69-
const uint64_t length,
71+
const uint32_t length,
7072
bool *const should_continue_out)
7173
{
7274
(void)spec_info;
7375

7476
struct callback_info *const cb_info = (struct callback_info *)info;
75-
const uint64_t old_used = cb_info->buffer_used;
77+
const uint32_t old_used = cb_info->buffer_used;
7678

77-
uint64_t new_used = old_used;
79+
uint32_t new_used = old_used;
7880
if (__builtin_add_overflow(new_used, length, &new_used)) {
7981
*should_continue_out = false;
8082
return 0;
8183
}
8284

83-
const uint64_t buffer_size = cb_info->buffer_size;
84-
uint64_t amount = length;
85+
const uint32_t buffer_size = cb_info->buffer_size;
86+
uint32_t amount = length;
8587

8688
if (new_used >= buffer_size) {
8789
/*
@@ -101,9 +103,9 @@ format_to_buffer_write_string_callback(
101103
return amount;
102104
}
103105

104-
uint64_t
106+
uint32_t
105107
vformat_to_buffer(char *const buffer_in,
106-
const uint64_t buffer_len,
108+
const uint32_t buffer_len,
107109
const char *const format,
108110
va_list list)
109111
{
@@ -118,7 +120,7 @@ vformat_to_buffer(char *const buffer_in,
118120
.buffer_size = buffer_len - 1
119121
};
120122

121-
const uint64_t length =
123+
const uint32_t length =
122124
parse_printf_format(format_to_buffer_write_ch_callback,
123125
&cb_info,
124126
format_to_buffer_write_string_callback,
@@ -130,11 +132,11 @@ vformat_to_buffer(char *const buffer_in,
130132
return length;
131133
}
132134

133-
static uint64_t
134-
get_length_ch_callback(const struct printf_spec_info *const spec_info,
135+
static uint32_t
136+
get_length_ch_callback(struct printf_spec_info *const spec_info,
135137
void *const cb_info,
136138
const char ch,
137-
const uint64_t times,
139+
const uint32_t times,
138140
bool *const should_continue_out)
139141
{
140142
(void)spec_info;
@@ -146,11 +148,11 @@ get_length_ch_callback(const struct printf_spec_info *const spec_info,
146148
return times;
147149
}
148150

149-
static uint64_t
150-
get_length_string_callback(const struct printf_spec_info *const spec_info,
151+
static uint32_t
152+
get_length_string_callback(struct printf_spec_info *const spec_info,
151153
void *const cb_info,
152154
const char *const string,
153-
const uint64_t length,
155+
const uint32_t length,
154156
bool *const should_continue_out)
155157
{
156158
(void)spec_info;
@@ -162,18 +164,18 @@ get_length_string_callback(const struct printf_spec_info *const spec_info,
162164
return length;
163165
}
164166

165-
uint64_t get_length_of_printf_format(const char *const fmt, ...) {
167+
uint32_t get_length_of_printf_format(const char *const fmt, ...) {
166168
va_list list;
167169
va_start(list, fmt);
168170

169-
const uint64_t result = get_length_of_printf_vformat(fmt, list);
171+
const uint32_t result = get_length_of_printf_vformat(fmt, list);
170172

171173
va_end(list);
172174
return result;
173175
}
174176

175-
uint64_t get_length_of_printf_vformat(const char *const fmt, va_list list) {
176-
const uint64_t length =
177+
uint32_t get_length_of_printf_vformat(const char *const fmt, va_list list) {
178+
const uint32_t length =
177179
parse_printf_format(get_length_ch_callback,
178180
/*char_cb_info=*/NULL,
179181
get_length_string_callback,

example.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ SOFTWARE.
2626
#include <stdarg.h>
2727

2828
__attribute__((format(printf, 3, 4)))
29-
uint64_t
29+
uint32_t
3030
format_to_buffer(char *buffer_in,
31-
uint64_t buffer_len,
31+
uint32_t buffer_len,
3232
const char *format,
3333
...);
3434

35-
uint64_t
35+
uint32_t
3636
vformat_to_buffer(char *buffer_in,
37-
uint64_t buffer_len,
37+
uint32_t buffer_len,
3838
const char *format,
3939
va_list list);
4040

4141
__attribute__((format(printf, 1, 2)))
42-
uint64_t get_length_of_printf_format(const char *fmt, ...);
42+
uint32_t get_length_of_printf_format(const char *fmt, ...);
4343

44-
uint64_t get_length_of_printf_vformat(const char *fmt, va_list list);
44+
uint32_t get_length_of_printf_vformat(const char *fmt, va_list list);

0 commit comments

Comments
 (0)