Futile attempts to improve things through memory management. But I'm freeing strings before they're used. No bueno.

This commit is contained in:
2024-12-20 18:31:09 -05:00
parent 1ead5d6823
commit 206eae527b
7 changed files with 171 additions and 231 deletions

View File

@@ -10,12 +10,14 @@ json_t *get_json_object_value(json_t *obj, char *key)
return value;
}
int get_json_boolean_value(json_t *obj, char *key)
bool get_json_boolean_value(json_t *obj, char *key)
{
json_t *value = json_object_get(obj, key);
THROW_ZERO(value, EXC_KEYERROR, "");
THROW_ZERO(json_is_boolean(value), EXC_ATTRIBUTEERROR, "");
return json_boolean_value(value);
bool i = json_boolean_value(value);
json_decref(value);
return i;
}
int get_json_integer_value(json_t *obj, char *key)
@@ -23,30 +25,38 @@ int get_json_integer_value(json_t *obj, char *key)
json_t *value = json_object_get(obj, key);
THROW_ZERO(value, EXC_KEYERROR, "");
THROW_ZERO(json_is_integer(value), EXC_ATTRIBUTEERROR, "");
return json_integer_value(value);
int i = json_integer_value(value);
json_decref(value);
return i;
}
float get_json_number_value(json_t *obj, char *key)
{
json_t *value = json_object_get(obj, key);
float f;
THROW_ZERO(value, EXC_KEYERROR, "");
THROW_ZERO(json_is_number(value), EXC_ATTRIBUTEERROR, "");
return json_number_value(value);
f = json_number_value(value);
json_decref(value);
return f;
}
const char *get_json_string_value(json_t *obj, char *key)
{
const char *s;
json_t *value = json_object_get(obj, key);
THROW_ZERO(value, EXC_KEYERROR, "");
THROW_ZERO(json_is_string(value), EXC_ATTRIBUTEERROR, "");
return json_string_value(value);
THROW_ZERO(value, EXC_KEYERROR, key);
THROW_ZERO(json_is_string(value), EXC_ATTRIBUTEERROR, key);
s = json_string_value(value);
json_decref(value);
return s;
}
json_t *get_json_array_value(json_t *obj, char *key)
{
json_t *value = json_object_get(obj, key);
THROW_ZERO(value, EXC_KEYERROR, "");
THROW_ZERO(json_is_array(value), EXC_ATTRIBUTEERROR, "");
THROW_ZERO(value, EXC_KEYERROR, key);
THROW_ZERO(json_is_array(value), EXC_ATTRIBUTEERROR, key);
return value;
}
@@ -60,8 +70,11 @@ json_t *get_json_array_index_object(json_t *array, int index)
int get_json_array_index_integer(json_t *array, int index)
{
int i;
json_t *value = json_array_get(array, index);
THROW_ZERO(value, EXC_INDEXERROR, "");
THROW_ZERO(json_is_integer(value), EXC_ATTRIBUTEERROR, "");
return json_integer_value(value);
i = json_integer_value(value);
json_decref(value);
return i;
}