Skip to content

Commit 1098b89

Browse files
committed
switch to size_t and more paranoid compiler flags
1 parent d98f7cc commit 1098b89

File tree

5 files changed

+10
-11
lines changed

5 files changed

+10
-11
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
all: test example
33

44
test.c: test/test.c src/js0n.c
5-
gcc -Wall -o test/test test/test.c src/js0n.c
5+
gcc -Wall -Wextra -Wno-unused-parameter -o test/test test/test.c src/js0n.c
66

77
test: test.c
88
@if ./test/test ; then \

src/js0n.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
#define PUSH(i) if(depth == 1) { if(!index) { val = cur+i; }else{ if(klen && index == 1) start = cur+i; else index--; } }
1717

1818
// determine if key matches or value is complete
19-
#define CAP(i) if(depth == 1) { if(val && !index) {*vlen = (cur+i+1) - val; return val;}; if(klen) index = (start && klen == (cur-start) && strncmp(key,start,klen)==0) ? 1 : 2;}
19+
#define CAP(i) if(depth == 1) { if(val && !index) {*vlen = (size_t)((cur+i+1) - val); return val;}; if(klen) index = (start && klen == (size_t)(cur-start) && strncmp(key,start,klen)==0) ? 1 : 2;}
2020

2121
// this makes a single pass across the json bytes, using each byte as an index into a jump table to build an index and transition state
22-
char *js0n(char *key, int klen, char *json, int jlen, int *vlen)
22+
char *js0n(char *key, size_t klen, char *json, size_t jlen, size_t *vlen)
2323
{
2424
char *val = 0;
2525
char *cur, *end, *start;
26-
int index = 1;
26+
size_t index = 1;
2727
int depth = 0;
2828
int utf8_remain = 0;
2929
static void *gostruct[] =
@@ -77,7 +77,6 @@ char *js0n(char *key, int klen, char *json, int jlen, int *vlen)
7777
// no key is array mode, klen provides requested index
7878
if(!key)
7979
{
80-
if(klen < 0) return 0;
8180
index = klen;
8281
klen = 0;
8382
}else{
@@ -159,4 +158,4 @@ char *js0n(char *key, int klen, char *json, int jlen, int *vlen)
159158

160159
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
161160
#pragma GCC diagnostic pop
162-
#endif
161+
#endif

src/js0n.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
// vlen = where to store return value length
66
// returns pointer to value and sets len to value length, or 0 if not found
77
// any parse error will set vlen to the position of the error
8-
char *js0n(char *key, int klen, char *json, int jlen, int *vlen);
8+
char *js0n(char *key, size_t klen, char *json, size_t jlen, size_t *vlen);

test/example.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55

66
void ex1(void)
77
{
8-
int vlen = 0;
8+
size_t vlen = 0;
99

1010
char *json = "{\"foo\":\"bar\",\"barbar\":[1,2,3],\"obj\":{\"a\":\"b\"}}";
1111
printf("parsing '%s'\n", json);
1212
char *val = js0n("barbar", 0, json, strlen(json), &vlen);
13-
printf("returned %.*s\n",vlen,val);
13+
printf("returned %.*s\n",(int)vlen,val);
1414

1515
char *array = "[\"foo\",\"bar\",[1,2,3],{\"a\":\"b\"},42]";
1616
printf("parsing '%s'\n", array);
1717
val = js0n(0, 3, array, strlen(array), &vlen);
18-
printf("returned %.*s\n",vlen,val);
18+
printf("returned %.*s\n",(int)vlen,val);
1919

2020
}
2121

test/test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
int main(int argc, char **argv)
88
{
99
char buff[1024], *json = NULL, *ret;
10-
int len, len2, jlen=0;
10+
size_t len, len2, jlen=0;
1111
FILE *f;
1212

1313
fail_unless((f = fopen("./test/test.json","r")) != NULL);

0 commit comments

Comments
 (0)