Skip to content
This repository was archived by the owner on Nov 30, 2021. It is now read-only.

Commit 4834786

Browse files
authored
Merge pull request #44 from ali-ince/1.7-fix-va-list-usage
Avoid multiple use of va_list
2 parents 0d4f311 + 0f3deb2 commit 4834786

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

seabolt/src/bolt/logging.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,19 @@ void BoltLog_destroy(struct BoltLog* log)
4848

4949
void _perform_log_call(log_func func, int state, const char* format, va_list args)
5050
{
51-
int size = 512*sizeof(char);
51+
size_t size = 512*sizeof(char);
5252
char* message_fmt = (char*) BoltMem_allocate(size);
5353
while (1) {
54-
int written = vsnprintf(message_fmt, size, format, args);
54+
va_list args_copy;
55+
va_copy(args_copy, args);
56+
size_t written = vsnprintf(message_fmt, size, format, args_copy);
57+
va_end(args_copy);
5558
if (written<size) {
5659
break;
5760
}
58-
BoltMem_deallocate(message_fmt, size);
59-
size = size*2;
60-
message_fmt = (char*) BoltMem_allocate(size);
61+
62+
message_fmt = (char*) BoltMem_reallocate(message_fmt, size, written+1);
63+
size = written+1;
6164
}
6265

6366
func(state, message_fmt);
@@ -122,15 +125,14 @@ void BoltLog_message(const struct BoltLog* log, const char* peer, bolt_request r
122125
struct BoltValue* fields, name_resolver_func struct_name_resolver, name_resolver_func message_name_resolver)
123126
{
124127
if (log!=NULL && log->debug_enabled) {
125-
const char* message_name = NULL;
128+
const char* message_name = "?";
126129
if (message_name_resolver!=NULL) {
127130
message_name = message_name_resolver(code);
128131
}
129132

130133
struct StringBuilder* builder = StringBuilder_create();
131134
BoltValue_write(builder, fields, struct_name_resolver);
132-
BoltLog_debug(log, "%s[%" PRIu64 "] %s %s", peer, request_id, message_name==NULL ? "?" : message_name,
133-
StringBuilder_get_string(builder));
135+
BoltLog_debug(log, "%s[%" PRIu64 "] %s %s", peer, request_id, message_name, StringBuilder_get_string(builder));
134136
StringBuilder_destroy(builder);
135137
}
136138
}

seabolt/src/bolt/utils.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
struct StringBuilder* StringBuilder_create()
2727
{
2828
struct StringBuilder* builder = (struct StringBuilder*) BoltMem_allocate(sizeof(struct StringBuilder));
29-
builder->buffer = BoltMem_allocate(1*sizeof(char));
30-
builder->buffer[0] = '\0';
29+
builder->buffer = (char*) BoltMem_allocate(256*sizeof(char));
30+
builder->buffer[0] = 0;
3131
builder->buffer_pos = 0;
32-
builder->buffer_size = 1;
32+
builder->buffer_size = 256;
3333
return builder;
3434
}
3535

@@ -45,7 +45,7 @@ void StringBuilder_ensure_buffer(struct StringBuilder* builder, size_t size_to_a
4545
return;
4646
}
4747

48-
size_t new_size = builder->buffer_pos+size_to_add+1;
48+
size_t new_size = builder->buffer_pos+size_to_add;
4949
builder->buffer = (char*) BoltMem_reallocate(builder->buffer, builder->buffer_size, new_size);
5050
builder->buffer_size = new_size;
5151
}
@@ -57,27 +57,27 @@ void StringBuilder_append(struct StringBuilder* builder, const char* string)
5757

5858
void StringBuilder_append_n(struct StringBuilder* builder, const char* string, const size_t len)
5959
{
60-
StringBuilder_ensure_buffer(builder, len);
60+
StringBuilder_ensure_buffer(builder, len+1);
6161
strncpy(builder->buffer+builder->buffer_pos, string, len);
6262
builder->buffer_pos += len;
63-
builder->buffer[builder->buffer_pos] = '\0';
63+
builder->buffer[builder->buffer_pos] = 0;
6464
}
6565

6666
void StringBuilder_append_f(struct StringBuilder* builder, const char* format, ...)
6767
{
68-
int size = 512*sizeof(char);
69-
char* message_fmt = BoltMem_allocate(size);
68+
size_t size = 10240*sizeof(char);
69+
char* message_fmt = (char*) BoltMem_allocate(size);
7070
while (1) {
7171
va_list args;
7272
va_start(args, format);
73-
int written = vsnprintf(message_fmt, size, format, args);
73+
size_t written = vsnprintf(message_fmt, size, format, args);
7474
va_end(args);
7575
if (written<size) {
7676
break;
7777
}
78-
BoltMem_deallocate(message_fmt, size);
79-
size = size*2;
80-
message_fmt = BoltMem_allocate(size);
78+
79+
message_fmt = (char*) BoltMem_reallocate(message_fmt, size, written+1);
80+
size = written+1;
8181
}
8282

8383
StringBuilder_append(builder, message_fmt);

seabolt/src/bolt/values.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,10 +558,10 @@ int BoltValue_write(struct StringBuilder* builder, struct BoltValue* value, name
558558
StringBuilder_append(builder, "{");
559559
int comma = 0;
560560
for (int i = 0; i<value->size; i++) {
561-
const char* key = BoltDictionary_get_key(value, i);
561+
struct BoltValue* key = BoltDictionary_key(value, i);
562562
if (key!=NULL) {
563563
if (comma) StringBuilder_append(builder, ", ");
564-
StringBuilder_append_n(builder, key, (size_t) (BoltDictionary_get_key_size(value, i)));
564+
StringBuilder_append_n(builder, BoltString_get(key), (size_t) key->size);
565565
StringBuilder_append(builder, ": ");
566566
BoltValue_write(builder, BoltDictionary_value(value, i), struct_name_resolver);
567567
comma = 1;

0 commit comments

Comments
 (0)