From: Haffon <20966113@qq.com> Date: Tue, 22 Aug 2017 05:53:47 +0000 (+0800) Subject: 1.make it can been compiled with Visual Studio 2010 X-Git-Tag: json-c-0.13-20171207~53^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3141c3976bfb9edef135de12ebbff6004520e990;p=json-c 1.make it can been compiled with Visual Studio 2010 2.replace json_object_get/put API with json_object_retain/release, as they operate the reference counter, and confused with array_list_get/put_idx. 3.replace array_list_get/put_idx API with array_list_get/insert to make them more clear to use. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 24ddac5..a5dc1e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,8 @@ set(JSON_C_HEADERS ./linkhash.h ./math_compat.h ./strdup_compat.h + ./strerror_override.h + ./strerror_override_private ./vasprintf_compat.h ./printbuf.h ./random_seed.h @@ -66,6 +68,7 @@ set(JSON_C_SOURCES ./json_util.c ./linkhash.c ./printbuf.c + ./strerror_override.c ./random_seed.c ) diff --git a/arraylist.c b/arraylist.c index 8439cc2..67d67b5 100644 --- a/arraylist.c +++ b/arraylist.c @@ -62,7 +62,7 @@ array_list_free(struct array_list *arr) } void* -array_list_get_idx(struct array_list *arr, size_t i) +array_list_get(struct array_list *arr, size_t i) { if(i >= arr->length) return NULL; return arr->array[i]; @@ -92,7 +92,7 @@ static int array_list_expand_internal(struct array_list *arr, size_t max) } int -array_list_put_idx(struct array_list *arr, size_t idx, void *data) +array_list_insert(struct array_list *arr, size_t idx, void *data) { if (idx > SIZE_T_MAX - 1 ) return -1; if(array_list_expand_internal(arr, idx+1)) return -1; @@ -106,7 +106,7 @@ array_list_put_idx(struct array_list *arr, size_t idx, void *data) int array_list_add(struct array_list *arr, void *data) { - return array_list_put_idx(arr, arr->length, data); + return array_list_insert(arr, arr->length, data); } void diff --git a/arraylist.h b/arraylist.h index bc10903..9519cd8 100644 --- a/arraylist.h +++ b/arraylist.h @@ -35,10 +35,10 @@ extern void array_list_free(struct array_list *al); extern void* -array_list_get_idx(struct array_list *al, size_t i); +array_list_get(struct array_list *al, size_t i); extern int -array_list_put_idx(struct array_list *al, size_t i, void *data); +array_list_insert(struct array_list *al, size_t i, void *data); extern int array_list_add(struct array_list *al, void *data); diff --git a/json_object.c b/json_object.c index 8c80426..2eae6e5 100644 --- a/json_object.c +++ b/json_object.c @@ -167,14 +167,14 @@ static int json_escape_str(struct printbuf *pb, const char *str, int len, int fl /* reference counting */ -extern struct json_object* json_object_get(struct json_object *jso) +extern struct json_object* json_object_retain(struct json_object *jso) { if (jso) jso->_ref_count++; return jso; } -int json_object_put(struct json_object *jso) +int json_object_release(struct json_object *jso) { if(jso) { @@ -408,7 +408,7 @@ static void json_object_lh_entry_free(struct lh_entry *ent) { if (!ent->k_is_constant) free(lh_entry_k(ent)); - json_object_put((struct json_object*)lh_entry_v(ent)); + json_object_release((struct json_object*)lh_entry_v(ent)); } static void json_object_object_delete(struct json_object* jso) @@ -453,13 +453,15 @@ int json_object_object_add_ex(struct json_object* jso, struct json_object *const val, const unsigned opts) { + struct json_object *existing_value = NULL; + struct lh_entry *existing_entry; + unsigned long hash; + assert(json_object_get_type(jso) == json_type_object); // We lookup the entry and replace the value, rather than just deleting // and re-adding it, so the existing key remains valid. - json_object *existing_value = NULL; - struct lh_entry *existing_entry; - const unsigned long hash = lh_get_hash(jso->o.c_object, (const void *)key); + hash = lh_get_hash(jso->o.c_object, (const void *)key); existing_entry = (opts & JSON_C_OBJECT_ADD_KEY_IS_NEW) ? NULL : lh_table_lookup_entry_w_hash(jso->o.c_object, (const void *)key, hash); @@ -479,7 +481,7 @@ int json_object_object_add_ex(struct json_object* jso, } existing_value = (json_object *) lh_entry_v(existing_entry); if (existing_value) - json_object_put(existing_value); + json_object_release(existing_value); existing_entry->v = val; return 0; } @@ -841,11 +843,12 @@ struct json_object* json_object_new_double(double d) struct json_object* json_object_new_double_s(double d, const char *ds) { + char *new_ds; struct json_object *jso = json_object_new_double(d); if (!jso) return NULL; - char *new_ds = strdup(ds); + new_ds = strdup(ds); if (!new_ds) { json_object_generic_delete(jso); @@ -1025,8 +1028,8 @@ int json_object_set_string(json_object* jso, const char* s) { } int json_object_set_string_len(json_object* jso, const char* s, int len){ - if (jso==NULL || jso->o_type!=json_type_string) return 0; char *dstbuf; + if (jso==NULL || jso->o_type!=json_type_string) return 0; if (leno.c_string.str.data; if (jso->o.c_string.len>=LEN_DIRECT_STRING_DATA) free(jso->o.c_string.str.ptr); @@ -1089,7 +1092,7 @@ static int json_object_array_to_json_string(struct json_object* jso, static void json_object_array_entry_free(void *data) { - json_object_put((struct json_object*)data); + json_object_release((struct json_object*)data); } static void json_object_array_delete(struct json_object* jso) @@ -1166,7 +1169,7 @@ int json_object_array_put_idx(struct json_object *jso, size_t idx, struct json_object *val) { assert(json_object_get_type(jso) == json_type_array); - return array_list_put_idx(jso->o.c_array, idx, val); + return array_list_insert(jso->o.c_array, idx, val); } int json_object_array_del_idx(struct json_object *jso, size_t idx, size_t count) @@ -1179,7 +1182,7 @@ struct json_object* json_object_array_get_idx(const struct json_object *jso, size_t idx) { assert(json_object_get_type(jso) == json_type_array); - return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); + return (struct json_object*)array_list_get(jso->o.c_array, idx); } static int json_array_equal(struct json_object* jso1, diff --git a/json_object.h b/json_object.h index 4bbc367..bbd0976 100644 --- a/json_object.h +++ b/json_object.h @@ -182,7 +182,7 @@ typedef enum json_type { * * @param obj the json_object instance */ -JSON_EXPORT struct json_object* json_object_get(struct json_object *obj); +JSON_EXPORT struct json_object* json_object_retain(struct json_object *obj); /** * Decrement the reference count of json_object and free if it reaches zero. @@ -192,7 +192,7 @@ JSON_EXPORT struct json_object* json_object_get(struct json_object *obj); * @param obj the json_object instance * @returns 1 if the object was freed. */ -JSON_EXPORT int json_object_put(struct json_object *obj); +JSON_EXPORT int json_object_release(struct json_object *obj); /** * Check if the json_object is of a given type diff --git a/json_pointer.c b/json_pointer.c index 2b2a9ef..1023d2f 100644 --- a/json_pointer.c +++ b/json_pointer.c @@ -240,7 +240,7 @@ int json_pointer_set(struct json_object **obj, const char *path, struct json_obj } if (path[0] == '\0') { - json_object_put(*obj); + json_object_release(*obj); *obj = value; return 0; } @@ -294,7 +294,7 @@ int json_pointer_setf(struct json_object **obj, struct json_object *value, const return rc; if (path_copy[0] == '\0') { - json_object_put(*obj); + json_object_release(*obj); *obj = value; goto out; } diff --git a/json_tokener.c b/json_tokener.c index 56b6c07..08911fe 100644 --- a/json_tokener.c +++ b/json_tokener.c @@ -139,7 +139,7 @@ static void json_tokener_reset_level(struct json_tokener *tok, int depth) { tok->stack[depth].state = json_tokener_state_eatws; tok->stack[depth].saved_state = json_tokener_state_start; - json_object_put(tok->stack[depth].current); + json_object_release(tok->stack[depth].current); tok->stack[depth].current = NULL; free(tok->stack[depth].obj_field_name); tok->stack[depth].obj_field_name = NULL; @@ -178,7 +178,7 @@ struct json_object* json_tokener_parse_verbose(const char *str, *error = tok->err; if(tok->err != json_tokener_success) { if (obj != NULL) - json_object_put(obj); + json_object_release(obj); obj = NULL; } @@ -378,7 +378,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok, case json_tokener_state_finish: if(tok->depth == 0) goto out; - obj = json_object_get(current); + obj = json_object_retain(current); json_tokener_reset_level(tok, tok->depth); tok->depth--; goto redo_char; @@ -387,10 +387,11 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok, { size_t size_inf; int is_negative = 0; + char *infbuf; printbuf_memappend_fast(tok->pb, &c, 1); size_inf = json_min(tok->st_pos+1, json_inf_str_len); - char *infbuf = tok->pb->buf; + infbuf = tok->pb->buf; if (*infbuf == '-') { infbuf++; @@ -958,7 +959,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok, if (tok->err == json_tokener_success) { - json_object *ret = json_object_get(current); + json_object *ret = json_object_retain(current); int ii; /* Partially reset, so we parse additional objects on subsequent calls. */ diff --git a/linkhash.c b/linkhash.c index 5497061..73925b9 100644 --- a/linkhash.c +++ b/linkhash.c @@ -560,6 +560,11 @@ int lh_table_resize(struct lh_table *t, int new_size) return 0; } +unsigned long lh_get_hash(const struct lh_table *t, const void *k) +{ + return t->hash_fn(k); +} + void lh_table_free(struct lh_table *t) { struct lh_entry *c; diff --git a/linkhash.h b/linkhash.h index a606345..b2b7f7e 100644 --- a/linkhash.h +++ b/linkhash.h @@ -332,10 +332,7 @@ int lh_table_resize(struct lh_table *t, int new_size); * @param k a pointer to the key to lookup * @return the key's hash */ -static inline unsigned long lh_get_hash(const struct lh_table *t, const void *k) -{ - return t->hash_fn(k); -} +unsigned long lh_get_hash(const struct lh_table *t, const void *k); /* Don't use this outside of linkhash.h: */ #ifdef __UNCONST diff --git a/random_seed.c b/random_seed.c index cb086d3..3232777 100644 --- a/random_seed.c +++ b/random_seed.c @@ -186,11 +186,11 @@ static int get_dev_random_seed() static int get_cryptgenrandom_seed() { - DEBUG_SEED("get_cryptgenrandom_seed"); - HCRYPTPROV hProvider = 0; int r; + DEBUG_SEED("get_cryptgenrandom_seed"); + if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { fprintf(stderr, "error CryptAcquireContextW"); exit(1);