403Webshell
Server IP : 189.126.111.107  /  Your IP : 216.73.217.69
Web Server : Apache
System : Linux www.gadotticar.com.br 5.4.0-135-generic #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 x86_64
User : gadotticar ( 1000)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/src/libks/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/src/libks/src/ks_json.c
/*
 * Copyright (c) 2018-2023 SignalWire, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#include "libks/ks.h"
#include "cJSON/cJSON.h"

// Create apis
KS_DECLARE(ks_json_t *) ks_json_create_array(void)
{
	return kJSON_CreateArray();
}

KS_DECLARE(ks_json_t *) ks_json_create_object(void)
{
	return kJSON_CreateObject();
}

KS_DECLARE(ks_json_t *) ks_json_create_number(double number)
{
	return kJSON_CreateNumber(number);
}

KS_DECLARE(ks_json_t *) ks_json_create_string_fmt(const char *fmt, ...)
{
	va_list ap;
	char *str;
	ks_json_t *item;

	va_start(ap, fmt);
	str = ks_vmprintf(fmt, ap);
	va_end(ap);

	if (!str) return NULL;

	item = kJSON_CreateString(str);

	free(str);	/* Managed by glibc for the formatting allocation */

	return item;
}

KS_DECLARE(ks_json_t *) ks_json_create_string(const char *string)
{
	return kJSON_CreateString(string);
}

KS_DECLARE(ks_json_t *) ks_json_create_false(void)
{
	return kJSON_CreateFalse();
}

KS_DECLARE(ks_json_t *) ks_json_create_true(void)
{
	return kJSON_CreateTrue();
}

KS_DECLARE(ks_json_t *) ks_json_create_null(void)
{
	return kJSON_CreateNull();
}

KS_DECLARE(ks_json_t *) ks_json_create_bool(ks_bool_t value)
{
	return kJSON_CreateBool(value == KS_TRUE);
}

// Parse apis
KS_DECLARE(ks_json_t *) ks_json_parse(const char *value)
{
	return kJSON_Parse(value);
}

// Add apis
KS_DECLARE(void) ks_json_add_item_to_array(ks_json_t *array, ks_json_t *item)
{
	kJSON_AddItemToArray(array, item);
}

KS_DECLARE(ks_json_t *) ks_json_add_array_to_array(ks_json_t *array)
{
	ks_json_t *new_array = ks_json_create_array();
	ks_json_add_item_to_array(array, new_array);
	return new_array;
}

KS_DECLARE(ks_json_t *) ks_json_add_object_to_array(ks_json_t *array)
{
	ks_json_t *new_object = ks_json_create_object();
	ks_json_add_item_to_array(array, new_object);
	return new_object;
}

KS_DECLARE(void) ks_json_add_string_to_array(ks_json_t *array, const char *string)
{
	ks_json_add_item_to_array(array, ks_json_create_string(string));
}

KS_DECLARE(void) ks_json_add_number_to_array(ks_json_t *array, double number)
{
	ks_json_add_item_to_array(array, ks_json_create_number(number));
}

KS_DECLARE(void) ks_json_add_true_to_array(ks_json_t *array)
{
	ks_json_add_item_to_array(array, ks_json_create_true());
}

KS_DECLARE(void) ks_json_add_false_to_array(ks_json_t *array)
{
	ks_json_add_item_to_array(array, ks_json_create_false());
}

KS_DECLARE(void) ks_json_add_bool_to_array(ks_json_t *array, ks_bool_t value)
{
	if (value == KS_TRUE) {
		ks_json_add_true_to_array(array);
	} else {
		ks_json_add_false_to_array(array);
	}
}

KS_DECLARE(void) ks_json_add_item_to_object(ks_json_t *object, const char *string, ks_json_t *item)
{
	// TODO check if item parent is NULL
	kJSON_AddItemToObject(object, string, item);
}

KS_DECLARE(ks_json_t *) ks_json_add_array_to_object(ks_json_t *object, const char *string)
{
	ks_json_t *new_array = ks_json_create_array();
	ks_json_add_item_to_object(object, string, new_array);
	return new_array;
}

KS_DECLARE(ks_json_t *) ks_json_add_object_to_object(ks_json_t *object, const char *string)
{
	ks_json_t *new_object = ks_json_create_object();
	ks_json_add_item_to_object(object, string, new_object);
	return new_object;
}

KS_DECLARE(void) ks_json_add_true_to_object(ks_json_t *object, const char *string)
{
	ks_json_add_item_to_object(object, string, ks_json_create_true());
}

KS_DECLARE(void) ks_json_add_false_to_object(ks_json_t *object, const char *string)
{
	ks_json_add_item_to_object(object, string, ks_json_create_false());
}

KS_DECLARE(void) ks_json_add_bool_to_object(ks_json_t *object, const char *string, ks_bool_t value)
{
	if (value == KS_TRUE) {
		ks_json_add_true_to_object(object, string);
	} else {
		ks_json_add_false_to_object(object, string);
	}
}

KS_DECLARE(void) ks_json_add_number_to_object(ks_json_t *object, const char *name, double number)
{
	ks_json_add_item_to_object(object, name, ks_json_create_number(number));
}

KS_DECLARE(void) ks_json_add_string_to_object(ks_json_t *object, const char *name, const char *string)
{
	ks_json_add_item_to_object(object, name, ks_json_create_string(string));
}

KS_DECLARE(ks_json_t *) ks_json_duplicate(ks_json_t *c, ks_bool_t recurse)
{
	return kJSON_Duplicate(c, recurse);
}

KS_DECLARE(void) ks_json_delete(ks_json_t **c)
{
	if (!c || !*c)
		return;

	kJSON_Delete(*c);
	*c = NULL;
}

KS_DECLARE(void) ks_json_delete_item_from_array(ks_json_t *array, int index)
{
	kJSON_DeleteItemFromArray(array, index);
}

KS_DECLARE(void) ks_json_delete_item_from_object(ks_json_t *obj, const char *key)
{
	kJSON_DeleteItemFromObject(obj, key);
}

// Get apis
KS_DECLARE(ks_json_t *) ks_json_get_array_item(ks_json_t *array, int index)
{
	return kJSON_GetArrayItem(array, index);
}

KS_DECLARE(ks_bool_t) ks_json_get_array_bool(ks_json_t *array, int index, ks_bool_t def)
{
	ks_bool_t retval = def;
	ks_json_t *item = ks_json_get_array_item(array, index);
	ks_json_value_bool(item, &retval);
	return retval;
}

KS_DECLARE(const char *) ks_json_get_array_string(ks_json_t *array, int index, const char* def)
{
	const char *retval = def;
	ks_json_t *item = ks_json_get_array_item(array, index);
	ks_json_value_string(item, &retval);
	return retval;
}

KS_DECLARE(int) ks_json_get_array_number_int(ks_json_t *array, int index, int def)
{
	int retval = def;
	ks_json_t *item = ks_json_get_array_item(array, index);
	ks_json_value_number_int(item, &retval);
	return retval;
}

KS_DECLARE(double) ks_json_get_array_number_double(ks_json_t *array, int index, double def)
{
	double retval = def;
	ks_json_t *item = ks_json_get_array_item(array, index);
	ks_json_value_number_double(item, &retval);
	return retval;
}

KS_DECLARE(int) ks_json_get_array_size(ks_json_t *array)
{
	return kJSON_GetArraySize(array);
}

KS_DECLARE(ks_json_t *) ks_json_get_object_item(ks_json_t *object, const char *string)
{
	return kJSON_GetObjectItemCaseSensitive(object, string);
}

KS_DECLARE(ks_bool_t) ks_json_get_object_bool(ks_json_t *object, const char *string, ks_bool_t def)
{
	ks_bool_t retval = def;
	ks_json_value_bool(ks_json_get_object_item(object, string), &retval);
	return retval;
}

KS_DECLARE(const char *) ks_json_get_object_string(ks_json_t *object, const char *key, const char *def)
{
	const char *retval = def;
	ks_json_value_string(ks_json_get_object_item(object, key), &retval);
	return retval;
}

KS_DECLARE(int) ks_json_get_object_number_int(ks_json_t *object, const char *key, int def)
{
	int retval = def;
	ks_json_value_number_int(ks_json_get_object_item(object, key), &retval);
	return retval;
}

KS_DECLARE(double) ks_json_get_object_number_double(ks_json_t *object, const char *key, double def)
{
	double retval = def;
	ks_json_value_number_double(ks_json_get_object_item(object, key), &retval);
	return retval;
}

KS_DECLARE(const char *) ks_json_get_name(ks_json_t *item)
{
	if (item) {
		return item->string;
	}
	return NULL;
}

KS_DECLARE(const char *) ks_json_get_string(ks_json_t *item, const char *def)
{
	const char *val = def;
	ks_json_value_string(item, &val);
	return val;
}

KS_DECLARE(int) ks_json_get_number_int(ks_json_t *item, int def)
{
	int val = def;
	ks_json_value_number_int(item, &val);
	return val;
}

KS_DECLARE(double) ks_json_get_number_double(ks_json_t *item, double def)
{
	double val = def;
	ks_json_value_number_double(item, &val);
	return val;
}

KS_DECLARE(ks_bool_t) ks_json_get_bool(ks_json_t *item, ks_bool_t def)
{
	ks_bool_t val = def;
	ks_json_value_bool(item, &val);
	return val;
}

KS_DECLARE(char *) ks_json_print(ks_json_t *item)
{
	return kJSON_Print(item);
}

KS_DECLARE(char *) ks_json_print_unformatted(ks_json_t *item)
{
	return kJSON_PrintUnformatted(item);
}

KS_DECLARE(ks_json_type_t) ks_json_type_get(ks_json_t *item)
{
	if (!item)
		return KS_JSON_TYPE_INVALID;
	return item->type;
}

KS_DECLARE(ks_bool_t) ks_json_type_is(ks_json_t *item, ks_json_type_t type)
{
	return ks_json_type_get(item) == type;
}

KS_DECLARE(ks_bool_t) ks_json_type_is_array(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_ARRAY);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_string(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_STRING);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_number(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_NUMBER);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_null(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_NULL);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_object(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_OBJECT);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_false(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_FALSE);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_true(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_TRUE);
}

KS_DECLARE(ks_bool_t) ks_json_type_is_bool(ks_json_t *item)
{
	return ks_json_type_is(item, KS_JSON_TYPE_FALSE) || ks_json_type_is(item, KS_JSON_TYPE_TRUE);
}

KS_DECLARE(ks_status_t) ks_json_name(ks_json_t *item, const char **name)
{
	if (!item->string || !*item->string) {
		return KS_STATUS_FAIL;
	}
	*name = item->string;
	return KS_STATUS_SUCCESS;
}

// Value apis
KS_DECLARE(ks_status_t) ks_json_value_string(ks_json_t *item, const char **value)
{
	if (!ks_json_type_is_string(item)) {
		return KS_STATUS_FAIL;
	}
	*value = item->valuestring;
	return KS_STATUS_SUCCESS;
}

KS_DECLARE(ks_status_t) ks_json_value_number_int(ks_json_t *item, int *value)
{
	if (!ks_json_type_is_number(item)) {
		return KS_STATUS_FAIL;
	}
	*value = item->valueint;
	return KS_STATUS_SUCCESS;
}

KS_DECLARE(ks_status_t) ks_json_value_number_double(ks_json_t *item, double *value)
{
	if (!ks_json_type_is_number(item)) {
		return KS_STATUS_FAIL;
	}
	*value = item->valuedouble;
	return KS_STATUS_SUCCESS;
}

KS_DECLARE(ks_status_t) ks_json_value_bool(ks_json_t *item, ks_bool_t *value)
{
	if (!ks_json_type_is_bool(item)) {
		return KS_STATUS_FAIL;
	}
	if (item->type == KS_JSON_TYPE_TRUE) {
		*value = KS_TRUE;
	} else {
		*value = KS_FALSE;
	}
	return KS_STATUS_SUCCESS;
}

KS_DECLARE(ks_json_t *) ks_json_enum_child(ks_json_t *item)
{
	if (!item) {
		return NULL;
	}
	return item->child;
}

KS_DECLARE(ks_json_t *) ks_json_enum_next(ks_json_t *item)
{
	if (!item) {
		return NULL;
	}
	return item->next;
}

/* For Emacs:
 * Local Variables:
 * mode:c
 * indent-tabs-mode:t
 * tab-width:4
 * c-basic-offset:4
 * End:
 * For VIM:
 * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
 */


Youez - 2016 - github.com/yon3zu
LinuXploit