Browse Source

* Don't use this as a variable, so we can compile with a C++ compiler

* Add casts from void* to type of assignment when using malloc 
  * Add #ifdef __cplusplus guards to all of the headers
  * Add typedefs for json_object, json_tokener, array_list, printbuf, lh_table
    Michael Clark, <michael@metaparadigm.com>


git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@33 327403b1-1117-474d-bef2-5cb71233fd97
tags/json-c-0.10-20120530
Michael Clark 16 years ago
parent
commit
aaec1ef3c5
17 changed files with 101 additions and 27 deletions
  1. +3
    -0
      ChangeLog
  2. +4
    -3
      arraylist.c
  3. +8
    -0
      arraylist.h
  4. +8
    -0
      debug.h
  5. +3
    -1
      json_object.c
  6. +16
    -7
      json_object.h
  7. +8
    -0
      json_object_private.h
  8. +4
    -2
      json_tokener.c
  9. +8
    -0
      json_tokener.h
  10. +3
    -3
      json_util.c
  11. +8
    -0
      json_util.h
  12. +3
    -3
      linkhash.c
  13. +8
    -0
      linkhash.h
  14. +4
    -3
      printbuf.c
  15. +8
    -0
      printbuf.h
  16. +4
    -4
      test1.c
  17. +1
    -1
      test2.c

+ 3
- 0
ChangeLog View File

@@ -1,5 +1,8 @@
0.9 0.9
* Don't use this as a variable, so we can compile with a C++ compiler * Don't use this as a variable, so we can compile with a C++ compiler
* Add casts from void* to type of assignment when using malloc
* Add #ifdef __cplusplus guards to all of the headers
* Add typedefs for json_object, json_tokener, array_list, printbuf, lh_table
Michael Clark, <michael@metaparadigm.com> Michael Clark, <michael@metaparadigm.com>
* Null pointer dereference fix. Fix json_object_get_boolean strlen test * Null pointer dereference fix. Fix json_object_get_boolean strlen test
to not return TRUE for zero length string. Remove redundant includes. to not return TRUE for zero length string. Remove redundant includes.


+ 4
- 3
arraylist.c View File

@@ -28,11 +28,12 @@ array_list_new(array_list_free_fn *free_fn)
{ {
struct array_list *arr; struct array_list *arr;


if(!(arr = calloc(1, sizeof(struct array_list)))) return NULL;
arr = (struct array_list*)calloc(1, sizeof(struct array_list));
if(!arr) return NULL;
arr->size = ARRAY_LIST_DEFAULT_SIZE; arr->size = ARRAY_LIST_DEFAULT_SIZE;
arr->length = 0; arr->length = 0;
arr->free_fn = free_fn; arr->free_fn = free_fn;
if(!(arr->array = calloc(sizeof(void*), arr->size))) {
if(!(arr->array = (void**)calloc(sizeof(void*), arr->size))) {
free(arr); free(arr);
return NULL; return NULL;
} }
@@ -64,7 +65,7 @@ static int array_list_expand_internal(struct array_list *arr, int max)
if(max < arr->size) return 0; if(max < arr->size) return 0;
new_size = max(arr->size << 1, max); new_size = max(arr->size << 1, max);
if(!(t = realloc(arr->array, new_size*sizeof(void*)))) return -1; if(!(t = realloc(arr->array, new_size*sizeof(void*)))) return -1;
arr->array = t;
arr->array = (void**)t;
(void)memset(arr->array + arr->size, 0, (new_size-arr->size)*sizeof(void*)); (void)memset(arr->array + arr->size, 0, (new_size-arr->size)*sizeof(void*));
arr->size = new_size; arr->size = new_size;
return 0; return 0;


+ 8
- 0
arraylist.h View File

@@ -12,6 +12,10 @@
#ifndef _arraylist_h_ #ifndef _arraylist_h_
#define _arraylist_h_ #define _arraylist_h_


#ifdef __cplusplus
extern "C" {
#endif

#define ARRAY_LIST_DEFAULT_SIZE 32 #define ARRAY_LIST_DEFAULT_SIZE 32


typedef void (array_list_free_fn) (void *data); typedef void (array_list_free_fn) (void *data);
@@ -42,4 +46,8 @@ array_list_add(struct array_list *al, void *data);
extern int extern int
array_list_length(struct array_list *al); array_list_length(struct array_list *al);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 8
- 0
debug.h View File

@@ -12,6 +12,10 @@
#ifndef _DEBUG_H_ #ifndef _DEBUG_H_
#define _DEBUG_H_ #define _DEBUG_H_


#ifdef __cplusplus
extern "C" {
#endif

extern void mc_set_debug(int debug); extern void mc_set_debug(int debug);
extern int mc_get_debug(void); extern int mc_get_debug(void);


@@ -39,4 +43,8 @@ extern void mc_info(const char *msg, ...);
#define MC_INFO(x, ...) if (0) mc_info(x, ##__VA_ARGS__) #define MC_INFO(x, ...) if (0) mc_info(x, ##__VA_ARGS__)
#endif #endif


#ifdef __cplusplus
}
#endif

#endif #endif

+ 3
- 1
json_object.c View File

@@ -159,7 +159,9 @@ static void json_object_generic_delete(struct json_object* jso)


static struct json_object* json_object_new(enum json_type o_type) static struct json_object* json_object_new(enum json_type o_type)
{ {
struct json_object *jso = calloc(sizeof(struct json_object), 1);
struct json_object *jso;

jso = (struct json_object*)calloc(sizeof(struct json_object), 1);
if(!jso) return NULL; if(!jso) return NULL;
jso->o_type = o_type; jso->o_type = o_type;
jso->_ref_count = 1; jso->_ref_count = 1;


+ 16
- 7
json_object.h View File

@@ -12,6 +12,10 @@
#ifndef _json_object_h_ #ifndef _json_object_h_
#define _json_object_h_ #define _json_object_h_


#ifdef __cplusplus
extern "C" {
#endif

#define JSON_OBJECT_DEF_HASH_ENTRIES 16 #define JSON_OBJECT_DEF_HASH_ENTRIES 16


#undef FALSE #undef FALSE
@@ -26,15 +30,16 @@ extern const char *json_hex_chars;
/* forward structure definitions */ /* forward structure definitions */


typedef int boolean; typedef int boolean;
struct printbuf;
struct lh_table;
struct array_list;
struct json_object;
struct json_object_iter;
typedef struct printbuf printbuf;
typedef struct lh_table lh_table;
typedef struct array_list array_list;
typedef struct json_object json_object;
typedef struct json_object_iter json_object_iter;
typedef struct json_tokener json_tokener;


/* supported object types */ /* supported object types */


enum json_type {
typedef enum json_type {
json_type_null, json_type_null,
json_type_boolean, json_type_boolean,
json_type_double, json_type_double,
@@ -42,7 +47,7 @@ enum json_type {
json_type_object, json_type_object,
json_type_array, json_type_array,
json_type_string json_type_string
};
} json_type;


/* reference counting functions */ /* reference counting functions */


@@ -307,4 +312,8 @@ extern struct json_object* json_object_new_string_len(const char *s, int len);
*/ */
extern const char* json_object_get_string(struct json_object *obj); extern const char* json_object_get_string(struct json_object *obj);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 8
- 0
json_object_private.h View File

@@ -12,6 +12,10 @@
#ifndef _json_object_private_h_ #ifndef _json_object_private_h_
#define _json_object_private_h_ #define _json_object_private_h_


#ifdef __cplusplus
extern "C" {
#endif

typedef void (json_object_delete_fn)(struct json_object *o); typedef void (json_object_delete_fn)(struct json_object *o);
typedef int (json_object_to_json_string_fn)(struct json_object *o, typedef int (json_object_to_json_string_fn)(struct json_object *o,
struct printbuf *pb); struct printbuf *pb);
@@ -41,4 +45,8 @@ struct json_object_iter
struct lh_entry *entry; struct lh_entry *entry;
}; };


#ifdef __cplusplus
}
#endif

#endif #endif

+ 4
- 2
json_tokener.c View File

@@ -57,7 +57,9 @@ const char* json_tokener_errors[] = {


struct json_tokener* json_tokener_new(void) struct json_tokener* json_tokener_new(void)
{ {
struct json_tokener *tok = calloc(1, sizeof(struct json_tokener));
struct json_tokener *tok;

tok = (struct json_tokener*)calloc(1, sizeof(struct json_tokener));
tok->pb = printbuf_new(); tok->pb = printbuf_new();
json_tokener_reset(tok); json_tokener_reset(tok);
return tok; return tok;
@@ -100,7 +102,7 @@ struct json_object* json_tokener_parse(char *str)
tok = json_tokener_new(); tok = json_tokener_new();
obj = json_tokener_parse_ex(tok, str, -1); obj = json_tokener_parse_ex(tok, str, -1);
if(tok->err != json_tokener_success) if(tok->err != json_tokener_success)
obj = error_ptr(-tok->err);
obj = (struct json_object*)error_ptr(-tok->err);
json_tokener_free(tok); json_tokener_free(tok);
return obj; return obj;
} }


+ 8
- 0
json_tokener.h View File

@@ -15,6 +15,10 @@
#include <stddef.h> #include <stddef.h>
#include "json_object.h" #include "json_object.h"


#ifdef __cplusplus
extern "C" {
#endif

enum json_tokener_error { enum json_tokener_error {
json_tokener_success, json_tokener_success,
json_tokener_continue, json_tokener_continue,
@@ -87,4 +91,8 @@ extern struct json_object* json_tokener_parse(char *str);
extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok, extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
char *str, int len); char *str, int len);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 3
- 3
json_util.c View File

@@ -62,11 +62,11 @@ struct json_object* json_object_from_file(char *filename)
if((fd = open(filename, O_RDONLY)) < 0) { if((fd = open(filename, O_RDONLY)) < 0) {
MC_ERROR("json_object_from_file: error reading file %s: %s\n", MC_ERROR("json_object_from_file: error reading file %s: %s\n",
filename, strerror(errno)); filename, strerror(errno));
return error_ptr(-1);
return (struct json_object*)error_ptr(-1);
} }
if(!(pb = printbuf_new())) { if(!(pb = printbuf_new())) {
MC_ERROR("json_object_from_file: printbuf_new failed\n"); MC_ERROR("json_object_from_file: printbuf_new failed\n");
return error_ptr(-1);
return (struct json_object*)error_ptr(-1);
} }
while((ret = read(fd, buf, JSON_FILE_BUF_SIZE)) > 0) { while((ret = read(fd, buf, JSON_FILE_BUF_SIZE)) > 0) {
printbuf_memappend(pb, buf, ret); printbuf_memappend(pb, buf, ret);
@@ -76,7 +76,7 @@ struct json_object* json_object_from_file(char *filename)
MC_ABORT("json_object_from_file: error reading file %s: %s\n", MC_ABORT("json_object_from_file: error reading file %s: %s\n",
filename, strerror(errno)); filename, strerror(errno));
printbuf_free(pb); printbuf_free(pb);
return error_ptr(-1);
return (struct json_object*)error_ptr(-1);
} }
obj = json_tokener_parse(pb->buf); obj = json_tokener_parse(pb->buf);
printbuf_free(pb); printbuf_free(pb);


+ 8
- 0
json_util.h View File

@@ -14,10 +14,18 @@


#include "json_object.h" #include "json_object.h"


#ifdef __cplusplus
extern "C" {
#endif

#define JSON_FILE_BUF_SIZE 4096 #define JSON_FILE_BUF_SIZE 4096


/* utility functions */ /* utility functions */
extern struct json_object* json_object_from_file(char *filename); extern struct json_object* json_object_from_file(char *filename);
extern int json_object_to_file(char *filename, struct json_object *obj); extern int json_object_to_file(char *filename, struct json_object *obj);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 3
- 3
linkhash.c View File

@@ -41,7 +41,7 @@ int lh_ptr_equal(const void *k1, const void *k2)
unsigned long lh_char_hash(const void *k) unsigned long lh_char_hash(const void *k)
{ {
unsigned int h = 0; unsigned int h = 0;
const char* data = k;
const char* data = (const char*)k;
while( *data!=0 ) h = h*129 + (unsigned int)(*data++) + LH_PRIME; while( *data!=0 ) h = h*129 + (unsigned int)(*data++) + LH_PRIME;


@@ -61,12 +61,12 @@ struct lh_table* lh_table_new(int size, const char *name,
int i; int i;
struct lh_table *t; struct lh_table *t;


t = calloc(1, sizeof(struct lh_table));
t = (struct lh_table*)calloc(1, sizeof(struct lh_table));
if(!t) lh_abort("lh_table_new: calloc failed\n"); if(!t) lh_abort("lh_table_new: calloc failed\n");
t->count = 0; t->count = 0;
t->size = size; t->size = size;
t->name = name; t->name = name;
t->table = calloc(size, sizeof(struct lh_entry));
t->table = (struct lh_entry*)calloc(size, sizeof(struct lh_entry));
if(!t->table) lh_abort("lh_table_new: calloc failed\n"); if(!t->table) lh_abort("lh_table_new: calloc failed\n");
t->free_fn = free_fn; t->free_fn = free_fn;
t->hash_fn = hash_fn; t->hash_fn = hash_fn;


+ 8
- 0
linkhash.h View File

@@ -12,6 +12,10 @@
#ifndef _linkhash_h_ #ifndef _linkhash_h_
#define _linkhash_h_ #define _linkhash_h_


#ifdef __cplusplus
extern "C" {
#endif

/** /**
* golden prime used in hash functions * golden prime used in hash functions
*/ */
@@ -261,4 +265,8 @@ extern int lh_table_delete(struct lh_table *t, const void *k);
void lh_abort(const char *msg, ...); void lh_abort(const char *msg, ...);
void lh_table_resize(struct lh_table *t, int new_size); void lh_table_resize(struct lh_table *t, int new_size);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 4
- 3
printbuf.c View File

@@ -29,10 +29,11 @@ struct printbuf* printbuf_new(void)
{ {
struct printbuf *p; struct printbuf *p;


if(!(p = calloc(1, sizeof(struct printbuf)))) return NULL;
p = (struct printbuf*)calloc(1, sizeof(struct printbuf));
if(!p) return NULL;
p->size = 32; p->size = 32;
p->bpos = 0; p->bpos = 0;
if(!(p->buf = malloc(p->size))) {
if(!(p->buf = (char*)malloc(p->size))) {
free(p); free(p);
return NULL; return NULL;
} }
@@ -50,7 +51,7 @@ int printbuf_memappend(struct printbuf *p, const char *buf, int size)
"bpos=%d wrsize=%d old_size=%d new_size=%d\n", "bpos=%d wrsize=%d old_size=%d new_size=%d\n",
p->bpos, size, p->size, new_size); p->bpos, size, p->size, new_size);
#endif /* PRINTBUF_DEBUG */ #endif /* PRINTBUF_DEBUG */
if(!(t = realloc(p->buf, new_size))) return -1;
if(!(t = (char*)realloc(p->buf, new_size))) return -1;
p->size = new_size; p->size = new_size;
p->buf = t; p->buf = t;
} }


+ 8
- 0
printbuf.h View File

@@ -12,6 +12,10 @@
#ifndef _printbuf_h_ #ifndef _printbuf_h_
#define _printbuf_h_ #define _printbuf_h_


#ifdef __cplusplus
extern "C" {
#endif

#undef PRINTBUF_DEBUG #undef PRINTBUF_DEBUG


struct printbuf { struct printbuf {
@@ -35,4 +39,8 @@ printbuf_reset(struct printbuf *p);
extern void extern void
printbuf_free(struct printbuf *p); printbuf_free(struct printbuf *p);


#ifdef __cplusplus
}
#endif

#endif #endif

+ 4
- 4
test1.c View File

@@ -7,9 +7,9 @@


int main(int argc, char **argv) int main(int argc, char **argv)
{ {
struct json_tokener *tok;
struct json_object *my_string, *my_int, *my_object, *my_array;
struct json_object *new_obj;
json_tokener *tok;
json_object *my_string, *my_int, *my_object, *my_array;
json_object *new_obj;
int i; int i;


MC_SET_DEBUG(1); MC_SET_DEBUG(1);
@@ -39,7 +39,7 @@ int main(int argc, char **argv)
json_object_array_put_idx(my_array, 4, json_object_new_int(5)); json_object_array_put_idx(my_array, 4, json_object_new_int(5));
printf("my_array=\n"); printf("my_array=\n");
for(i=0; i < json_object_array_length(my_array); i++) { for(i=0; i < json_object_array_length(my_array); i++) {
struct json_object *obj = json_object_array_get_idx(my_array, i);
json_object *obj = json_object_array_get_idx(my_array, i);
printf("\t[%d]=%s\n", i, json_object_to_json_string(obj)); printf("\t[%d]=%s\n", i, json_object_to_json_string(obj));
} }
printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array)); printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));


+ 1
- 1
test2.c View File

@@ -8,7 +8,7 @@


int main(int argc, char **argv) int main(int argc, char **argv)
{ {
struct json_object *new_obj;
json_object *new_obj;


MC_SET_DEBUG(1); MC_SET_DEBUG(1);




Loading…
Cancel
Save