Skip to content

Commit b250666

Browse files
authored
Merge pull request #9 from tsoding/split-jim-string
Split jim_string into sized and NULL-terminated versions
2 parents 6131d23 + 4a4c352 commit b250666

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

example.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,23 @@ int main()
1111
};
1212

1313
jim_object_begin(&jim);
14-
jim_member_key(&jim, "null", NULL);
14+
jim_member_key(&jim, "null");
1515
jim_null(&jim);
1616

17-
jim_member_key(&jim, "bool", NULL);
17+
jim_member_key(&jim, "bool");
1818
jim_array_begin(&jim);
1919
jim_bool(&jim, 0);
2020
jim_bool(&jim, 1);
2121
jim_array_end(&jim);
2222

23-
jim_member_key(&jim, "integers", NULL);
23+
jim_member_key(&jim, "integers");
2424
jim_array_begin(&jim);
2525
for (int i = -3; i <= 3; ++i) {
2626
jim_integer(&jim, i);
2727
}
2828
jim_array_end(&jim);
2929

30-
jim_member_key(&jim, "floats", NULL);
30+
jim_member_key(&jim, "floats");
3131
jim_array_begin(&jim);
3232
jim_float(&jim, 0.0, 4);
3333
jim_float(&jim, -0.0, 4);
@@ -39,11 +39,10 @@ int main()
3939
jim_float(&jim, -1.0 / 0.0, 4);
4040
jim_array_end(&jim);
4141

42-
jim_member_key(&jim, "string", NULL);
42+
jim_member_key(&jim, "string");
4343
jim_array_begin(&jim);
44-
jim_string(&jim, "Hello\tWorld\n", NULL);
45-
unsigned int size = 4;
46-
jim_string(&jim, "\0\0\0\0", &size);
44+
jim_string(&jim, "Hello\tWorld\n");
45+
jim_string_sized(&jim, "\0\0\0\0", 4);
4746
jim_array_end(&jim);
4847
jim_object_end(&jim);
4948

jim.h

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ void jim_null(Jim *jim);
4242
void jim_bool(Jim *jim, int boolean);
4343
void jim_integer(Jim *jim, long long int x);
4444
void jim_float(Jim *jim, double x, int precision);
45-
void jim_string(Jim *jim, const char *str, const unsigned int *size);
45+
void jim_string(Jim *jim, const char *str);
46+
void jim_string_sized(Jim *jim, const char *str, size_t size);
4647

4748
void jim_element_begin(Jim *jim);
4849
void jim_element_end(Jim *jim);
@@ -51,7 +52,8 @@ void jim_array_begin(Jim *jim);
5152
void jim_array_end(Jim *jim);
5253

5354
void jim_object_begin(Jim *jim);
54-
void jim_member_key(Jim *jim, const char *str, const unsigned int *size);
55+
void jim_member_key(Jim *jim, const char *str);
56+
void jim_member_key_sized(Jim *jim, const char *str, size_t size);
5557
void jim_object_end(Jim *jim);
5658

5759
#endif // JIM_H_
@@ -268,13 +270,13 @@ void jim_float(Jim *jim, double x, int precision)
268270
}
269271
}
270272

271-
static void jim_string_no_element(Jim *jim, const char *str, const unsigned int *size)
273+
static void jim_string_sized_no_element(Jim *jim, const char *str, size_t size)
272274
{
273275
if (jim->error == JIM_OK) {
274276
const char *hex_digits = "0123456789abcdef";
275277
const char *specials = "btnvfr";
276278
const char *p = str;
277-
size_t len = size ? *size : jim_strlen(str);
279+
size_t len = size;
278280

279281
jim_write_cstr(jim, "\"");
280282
size_t cl;
@@ -302,15 +304,22 @@ static void jim_string_no_element(Jim *jim, const char *str, const unsigned int
302304
}
303305
}
304306

305-
void jim_string(Jim *jim, const char *str, const unsigned int *size)
307+
void jim_string_sized(Jim *jim, const char *str, size_t size)
306308
{
307309
if (jim->error == JIM_OK) {
308310
jim_element_begin(jim);
309-
jim_string_no_element(jim, str, size);
311+
jim_string_sized_no_element(jim, str, size);
310312
jim_element_end(jim);
311313
}
312314
}
313315

316+
void jim_string(Jim *jim, const char *str)
317+
{
318+
if (jim->error == JIM_OK) {
319+
jim_string_sized(jim, str, jim_strlen(str));
320+
}
321+
}
322+
314323
void jim_array_begin(Jim *jim)
315324
{
316325
if (jim->error == JIM_OK) {
@@ -339,14 +348,21 @@ void jim_object_begin(Jim *jim)
339348
}
340349
}
341350

342-
void jim_member_key(Jim *jim, const char *str, const unsigned int *size)
351+
void jim_member_key(Jim *jim, const char *str)
352+
{
353+
if (jim->error == JIM_OK) {
354+
jim_member_key_sized(jim, str, jim_strlen(str));
355+
}
356+
}
357+
358+
void jim_member_key_sized(Jim *jim, const char *str, size_t size)
343359
{
344360
if (jim->error == JIM_OK) {
345361
jim_element_begin(jim);
346362
Jim_Scope *scope = jim_current_scope(jim);
347363
if (scope && scope->kind == JIM_OBJECT_SCOPE) {
348364
if (!scope->key) {
349-
jim_string_no_element(jim, str, size);
365+
jim_string_sized_no_element(jim, str, size);
350366
jim_write_cstr(jim, ":");
351367
scope->key = 1;
352368
} else {

test.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,10 @@ void float_case(Jim *jim)
8484
void string_case(Jim *jim)
8585
{
8686
jim_array_begin(jim);
87-
jim_string(jim, "hello", NULL);
88-
jim_string(jim, "world", NULL);
89-
jim_string(jim, "\n\b\t", NULL);
90-
const unsigned int size = 4;
91-
jim_string(jim, "\0\0\0\0", &size);
87+
jim_string(jim, "hello");
88+
jim_string(jim, "world");
89+
jim_string(jim, "\n\b\t");
90+
jim_string_sized(jim, "\0\0\0\0", 4);
9291
jim_array_end(jim);
9392
}
9493

@@ -108,9 +107,9 @@ void object_case_rec(Jim *jim, int level, int *counter)
108107
{
109108
if (level < 3) {
110109
jim_object_begin(jim);
111-
jim_member_key(jim, "l", NULL);
110+
jim_member_key(jim, "l");
112111
object_case_rec(jim, level + 1, counter);
113-
jim_member_key(jim, "r", NULL);
112+
jim_member_key(jim, "r");
114113
object_case_rec(jim, level + 1, counter);
115114
jim_object_end(jim);
116115
} else {
@@ -164,8 +163,7 @@ void record(const char *header_path)
164163
buffer_clean(&buffer);
165164
test_cases[i].run(&jim_buffer);
166165
fprintf(stream, " ");
167-
const unsigned int size = buffer.size;
168-
jim_string(&jim_stream, buffer.data, &size);
166+
jim_string_sized(&jim_stream, buffer.data, buffer.size);
169167
fprintf(stream, ",\n");
170168
}
171169
fprintf(stream, "};\n");

0 commit comments

Comments
 (0)