fix: minor code refactor
This commit is contained in:
		
							parent
							
								
									505faa6df2
								
							
						
					
					
						commit
						f167f9caec
					
				
					 22 changed files with 83 additions and 30 deletions
				
			
		| 
						 | 
				
			
			@ -1,130 +0,0 @@
 | 
			
		|||
/**
 | 
			
		||||
 * Copyright (C) 2012-2015 Yecheng Fu <cofyc.jackson at gmail dot com>
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Use of this source code is governed by a MIT-style license that can be found
 | 
			
		||||
 * in the LICENSE file.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef ARGPARSE_H
 | 
			
		||||
#define ARGPARSE_H
 | 
			
		||||
 | 
			
		||||
/* For c++ compatibility */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
struct argparse;
 | 
			
		||||
struct argparse_option;
 | 
			
		||||
 | 
			
		||||
typedef int argparse_callback (struct argparse *self,
 | 
			
		||||
                               const struct argparse_option *option);
 | 
			
		||||
 | 
			
		||||
enum argparse_flag {
 | 
			
		||||
    ARGPARSE_STOP_AT_NON_OPTION = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum argparse_option_type {
 | 
			
		||||
    /* special */
 | 
			
		||||
    ARGPARSE_OPT_END,
 | 
			
		||||
    ARGPARSE_OPT_GROUP,
 | 
			
		||||
    /* options with no arguments */
 | 
			
		||||
    ARGPARSE_OPT_BOOLEAN,
 | 
			
		||||
    ARGPARSE_OPT_BIT,
 | 
			
		||||
    /* options with arguments (optional or required) */
 | 
			
		||||
    ARGPARSE_OPT_INTEGER,
 | 
			
		||||
    ARGPARSE_OPT_FLOAT,
 | 
			
		||||
    ARGPARSE_OPT_STRING,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum argparse_option_flags {
 | 
			
		||||
    OPT_NONEG = 1,              /* disable negation */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  argparse option
 | 
			
		||||
 *
 | 
			
		||||
 *  `type`:
 | 
			
		||||
 *    holds the type of the option, you must have an ARGPARSE_OPT_END last in your
 | 
			
		||||
 *    array.
 | 
			
		||||
 *
 | 
			
		||||
 *  `short_name`:
 | 
			
		||||
 *    the character to use as a short option name, '\0' if none.
 | 
			
		||||
 *
 | 
			
		||||
 *  `long_name`:
 | 
			
		||||
 *    the long option name, without the leading dash, NULL if none.
 | 
			
		||||
 *
 | 
			
		||||
 *  `value`:
 | 
			
		||||
 *    stores pointer to the value to be filled.
 | 
			
		||||
 *
 | 
			
		||||
 *  `help`:
 | 
			
		||||
 *    the short help message associated to what the option does.
 | 
			
		||||
 *    Must never be NULL (except for ARGPARSE_OPT_END).
 | 
			
		||||
 *
 | 
			
		||||
 *  `callback`:
 | 
			
		||||
 *    function is called when corresponding argument is parsed.
 | 
			
		||||
 *
 | 
			
		||||
 *  `data`:
 | 
			
		||||
 *    associated data. Callbacks can use it like they want.
 | 
			
		||||
 *
 | 
			
		||||
 *  `flags`:
 | 
			
		||||
 *    option flags.
 | 
			
		||||
 */
 | 
			
		||||
struct argparse_option {
 | 
			
		||||
    enum argparse_option_type type;
 | 
			
		||||
    const char short_name;
 | 
			
		||||
    const char *long_name;
 | 
			
		||||
    void *value;
 | 
			
		||||
    const char *help;
 | 
			
		||||
    argparse_callback *callback;
 | 
			
		||||
    intptr_t data;
 | 
			
		||||
    int flags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * argpparse
 | 
			
		||||
 */
 | 
			
		||||
struct argparse {
 | 
			
		||||
    // user supplied
 | 
			
		||||
    const struct argparse_option *options;
 | 
			
		||||
    const char *const *usages;
 | 
			
		||||
    int flags;
 | 
			
		||||
    const char *description;    // a description after usage
 | 
			
		||||
    const char *epilog;         // a description at the end
 | 
			
		||||
    // internal context
 | 
			
		||||
    int argc;
 | 
			
		||||
    const char **argv;
 | 
			
		||||
    const char **out;
 | 
			
		||||
    int cpidx;
 | 
			
		||||
    const char *optvalue;       // current option value
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// built-in callbacks
 | 
			
		||||
int argparse_help_cb(struct argparse *self,
 | 
			
		||||
                     const struct argparse_option *option);
 | 
			
		||||
 | 
			
		||||
// built-in option macros
 | 
			
		||||
#define OPT_END()        { ARGPARSE_OPT_END, 0, NULL, NULL, 0, NULL, 0, 0 }
 | 
			
		||||
#define OPT_BOOLEAN(...) { ARGPARSE_OPT_BOOLEAN, __VA_ARGS__ }
 | 
			
		||||
#define OPT_BIT(...)     { ARGPARSE_OPT_BIT, __VA_ARGS__ }
 | 
			
		||||
#define OPT_INTEGER(...) { ARGPARSE_OPT_INTEGER, __VA_ARGS__ }
 | 
			
		||||
#define OPT_FLOAT(...)   { ARGPARSE_OPT_FLOAT, __VA_ARGS__ }
 | 
			
		||||
#define OPT_STRING(...)  { ARGPARSE_OPT_STRING, __VA_ARGS__ }
 | 
			
		||||
#define OPT_GROUP(h)     { ARGPARSE_OPT_GROUP, 0, NULL, NULL, h, NULL, 0, 0 }
 | 
			
		||||
#define OPT_HELP()       OPT_BOOLEAN('h', "help", NULL,                 \
 | 
			
		||||
                                     "show this help message and exit", \
 | 
			
		||||
                                     argparse_help_cb, 0, OPT_NONEG)
 | 
			
		||||
 | 
			
		||||
int argparse_init(struct argparse *self, struct argparse_option *options,
 | 
			
		||||
                  const char *const *usages, int flags);
 | 
			
		||||
void argparse_describe(struct argparse *self, const char *description,
 | 
			
		||||
                       const char *epilog);
 | 
			
		||||
int argparse_parse(struct argparse *self, int argc, const char **argv);
 | 
			
		||||
void argparse_usage(struct argparse *self);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										293
									
								
								include/cJSON.h
									
										
									
									
									
								
							
							
						
						
									
										293
									
								
								include/cJSON.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,293 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef cJSON__h
 | 
			
		||||
#define cJSON__h
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
 | 
			
		||||
#define __WINDOWS__
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __WINDOWS__
 | 
			
		||||
 | 
			
		||||
/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention.  For windows you have 3 define options:
 | 
			
		||||
 | 
			
		||||
CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
 | 
			
		||||
CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
 | 
			
		||||
CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
 | 
			
		||||
 | 
			
		||||
For *nix builds that support visibility attribute, you can define similar behavior by
 | 
			
		||||
 | 
			
		||||
setting default visibility to hidden by adding
 | 
			
		||||
-fvisibility=hidden (for gcc)
 | 
			
		||||
or
 | 
			
		||||
-xldscope=hidden (for sun cc)
 | 
			
		||||
to CFLAGS
 | 
			
		||||
 | 
			
		||||
then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define CJSON_CDECL __cdecl
 | 
			
		||||
#define CJSON_STDCALL __stdcall
 | 
			
		||||
 | 
			
		||||
/* export symbols by default, this is necessary for copy pasting the C and header file */
 | 
			
		||||
#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
 | 
			
		||||
#define CJSON_EXPORT_SYMBOLS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CJSON_HIDE_SYMBOLS)
 | 
			
		||||
#define CJSON_PUBLIC(type)   type CJSON_STDCALL
 | 
			
		||||
#elif defined(CJSON_EXPORT_SYMBOLS)
 | 
			
		||||
#define CJSON_PUBLIC(type)   __declspec(dllexport) type CJSON_STDCALL
 | 
			
		||||
#elif defined(CJSON_IMPORT_SYMBOLS)
 | 
			
		||||
#define CJSON_PUBLIC(type)   __declspec(dllimport) type CJSON_STDCALL
 | 
			
		||||
#endif
 | 
			
		||||
#else /* !__WINDOWS__ */
 | 
			
		||||
#define CJSON_CDECL
 | 
			
		||||
#define CJSON_STDCALL
 | 
			
		||||
 | 
			
		||||
#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
 | 
			
		||||
#define CJSON_PUBLIC(type)   __attribute__((visibility("default"))) type
 | 
			
		||||
#else
 | 
			
		||||
#define CJSON_PUBLIC(type) type
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* project version */
 | 
			
		||||
#define CJSON_VERSION_MAJOR 1
 | 
			
		||||
#define CJSON_VERSION_MINOR 7
 | 
			
		||||
#define CJSON_VERSION_PATCH 13
 | 
			
		||||
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
/* cJSON Types: */
 | 
			
		||||
#define cJSON_Invalid (0)
 | 
			
		||||
#define cJSON_False  (1 << 0)
 | 
			
		||||
#define cJSON_True   (1 << 1)
 | 
			
		||||
#define cJSON_NULL   (1 << 2)
 | 
			
		||||
#define cJSON_Number (1 << 3)
 | 
			
		||||
#define cJSON_String (1 << 4)
 | 
			
		||||
#define cJSON_Array  (1 << 5)
 | 
			
		||||
#define cJSON_Object (1 << 6)
 | 
			
		||||
#define cJSON_Raw    (1 << 7) /* raw json */
 | 
			
		||||
 | 
			
		||||
#define cJSON_IsReference 256
 | 
			
		||||
#define cJSON_StringIsConst 512
 | 
			
		||||
 | 
			
		||||
/* The cJSON structure: */
 | 
			
		||||
typedef struct cJSON
 | 
			
		||||
{
 | 
			
		||||
    /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
 | 
			
		||||
    struct cJSON *next;
 | 
			
		||||
    struct cJSON *prev;
 | 
			
		||||
    /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
 | 
			
		||||
    struct cJSON *child;
 | 
			
		||||
 | 
			
		||||
    /* The type of the item, as above. */
 | 
			
		||||
    int type;
 | 
			
		||||
 | 
			
		||||
    /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
 | 
			
		||||
    char *valuestring;
 | 
			
		||||
    /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
 | 
			
		||||
    int valueint;
 | 
			
		||||
    /* The item's number, if type==cJSON_Number */
 | 
			
		||||
    double valuedouble;
 | 
			
		||||
 | 
			
		||||
    /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
 | 
			
		||||
    char *string;
 | 
			
		||||
} cJSON;
 | 
			
		||||
 | 
			
		||||
typedef struct cJSON_Hooks
 | 
			
		||||
{
 | 
			
		||||
      /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
 | 
			
		||||
      void *(CJSON_CDECL *malloc_fn)(size_t sz);
 | 
			
		||||
      void (CJSON_CDECL *free_fn)(void *ptr);
 | 
			
		||||
} cJSON_Hooks;
 | 
			
		||||
 | 
			
		||||
typedef int cJSON_bool;
 | 
			
		||||
 | 
			
		||||
/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
 | 
			
		||||
 * This is to prevent stack overflows. */
 | 
			
		||||
#ifndef CJSON_NESTING_LIMIT
 | 
			
		||||
#define CJSON_NESTING_LIMIT 1000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* returns the version of cJSON as a string */
 | 
			
		||||
CJSON_PUBLIC(const char*) cJSON_Version(void);
 | 
			
		||||
 | 
			
		||||
/* Supply malloc, realloc and free functions to cJSON */
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
 | 
			
		||||
 | 
			
		||||
/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
 | 
			
		||||
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);
 | 
			
		||||
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
 | 
			
		||||
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);
 | 
			
		||||
 | 
			
		||||
/* Render a cJSON entity to text for transfer/storage. */
 | 
			
		||||
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
 | 
			
		||||
/* Render a cJSON entity to text for transfer/storage without any formatting. */
 | 
			
		||||
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
 | 
			
		||||
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
 | 
			
		||||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
 | 
			
		||||
/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
 | 
			
		||||
/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
 | 
			
		||||
/* Delete a cJSON entity and all subentities. */
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item);
 | 
			
		||||
 | 
			
		||||
/* Returns the number of items in an array (or object). */
 | 
			
		||||
CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
 | 
			
		||||
/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
 | 
			
		||||
/* Get item "string" from object. Case insensitive. */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
 | 
			
		||||
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
 | 
			
		||||
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
 | 
			
		||||
 | 
			
		||||
/* Check item type and return its value */
 | 
			
		||||
CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
 | 
			
		||||
CJSON_PUBLIC(double) cJSON_GetNumberValue(cJSON *item);
 | 
			
		||||
 | 
			
		||||
/* These functions check the type of an item */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
 | 
			
		||||
 | 
			
		||||
/* These calls create a cJSON item of the appropriate type. */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
 | 
			
		||||
/* raw json */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
 | 
			
		||||
 | 
			
		||||
/* Create a string where valuestring references a string so
 | 
			
		||||
 * it will not be freed by cJSON_Delete */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
 | 
			
		||||
/* Create an object/array that only references it's elements so
 | 
			
		||||
 * they will not be freed by cJSON_Delete */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
 | 
			
		||||
 | 
			
		||||
/* These utilities create an Array of count items.
 | 
			
		||||
 * The parameter count cannot be greater than the number of elements in the number array, otherwise array access will be out of bounds.*/
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
 | 
			
		||||
 | 
			
		||||
/* Append item to the specified array/object. */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
 | 
			
		||||
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
 | 
			
		||||
 * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
 | 
			
		||||
 * writing to `item->string` */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
 | 
			
		||||
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
 | 
			
		||||
 | 
			
		||||
/* Remove/Detach items from Arrays/Objects. */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
 | 
			
		||||
 | 
			
		||||
/* Update array items. */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
 | 
			
		||||
 | 
			
		||||
/* Duplicate a cJSON item */
 | 
			
		||||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
 | 
			
		||||
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
 | 
			
		||||
 * need to be released. With recurse!=0, it will duplicate any children connected to the item.
 | 
			
		||||
 * The item->next and ->prev pointers are always zero on return from Duplicate. */
 | 
			
		||||
/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
 | 
			
		||||
 * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
 | 
			
		||||
CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
 | 
			
		||||
 | 
			
		||||
/* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
 | 
			
		||||
 * The input pointer json cannot point to a read-only address area, such as a string constant, 
 | 
			
		||||
 * but should point to a readable and writable adress area. */
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_Minify(char *json);
 | 
			
		||||
 | 
			
		||||
/* Helper functions for creating and adding items to an object at the same time.
 | 
			
		||||
 * They return the added item or NULL on failure. */
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
 | 
			
		||||
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
 | 
			
		||||
 | 
			
		||||
/* When assigning an integer value, it needs to be propagated to valuedouble too. */
 | 
			
		||||
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
 | 
			
		||||
/* helper for the cJSON_SetNumberValue macro */
 | 
			
		||||
CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
 | 
			
		||||
#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
 | 
			
		||||
/* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */
 | 
			
		||||
CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring);
 | 
			
		||||
 | 
			
		||||
/* Macro for iterating over an array or object */
 | 
			
		||||
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
 | 
			
		||||
 | 
			
		||||
/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
 | 
			
		||||
CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
 | 
			
		||||
CJSON_PUBLIC(void) cJSON_free(void *object);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										11
									
								
								include/cache.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/cache.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
#ifndef CORE_CACHE_H
 | 
			
		||||
#define CORE_CACHE_H
 | 
			
		||||
 | 
			
		||||
#include <sqlite3.h>
 | 
			
		||||
 | 
			
		||||
extern sqlite3 *cache_database;
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cache_init();
 | 
			
		||||
 | 
			
		||||
#endif /* CORE_CACHE_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,547 +0,0 @@
 | 
			
		|||
/*  -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*-  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
    @file       confini.h
 | 
			
		||||
    @brief      libconfini header
 | 
			
		||||
    @author     Stefano Gioffré
 | 
			
		||||
    @copyright  GNU General Public License, version 3 or any later version
 | 
			
		||||
    @version    1.14.0
 | 
			
		||||
    @date       2016-2020
 | 
			
		||||
    @see        https://madmurphy.github.io/libconfini
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef _LIBCONFINI_HEADER_
 | 
			
		||||
#define _LIBCONFINI_HEADER_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PRIVATE (HEADER-SCOPED) MACROS  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define __INIFORMAT_TABLE_CB_FIELDS__(NAME, OFFSET, SIZE, DEFVAL) \
 | 
			
		||||
    unsigned char NAME:SIZE;
 | 
			
		||||
#define __INIFORMAT_TABLE_CB_DEFAULT__(NAME, OFFSET, SIZE, DEFVAL) DEFVAL,
 | 
			
		||||
#define __INIFORMAT_TABLE_CB_ZERO__(NAME, OFFSET, SIZE, DEFVAL) 0,
 | 
			
		||||
#define _LIBCONFINI_INIFORMAT_TYPE_ \
 | 
			
		||||
    struct IniFormat { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_FIELDS__) }
 | 
			
		||||
#define _LIBCONFINI_DEFAULT_FORMAT_ \
 | 
			
		||||
    { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_DEFAULT__) }
 | 
			
		||||
#define _LIBCONFINI_UNIXLIKE_FORMAT_ \
 | 
			
		||||
    { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_ZERO__) }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PUBLIC MACROS  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Calls a user-given macro (that accepts four arguments) for each row
 | 
			
		||||
            of the table
 | 
			
		||||
**/
 | 
			
		||||
/*
 | 
			
		||||
    NOTE: The following table and the order of its rows **define** (and link
 | 
			
		||||
    together) both the #IniFormat and #IniFormatNum data types declared in this
 | 
			
		||||
    header
 | 
			
		||||
*/
 | 
			
		||||
#define INIFORMAT_TABLE_AS(_____)                 /*  IniFormat table  *\
 | 
			
		||||
 | 
			
		||||
        NAME                      BIT  SIZE DEFAULT
 | 
			
		||||
                                                                      */\
 | 
			
		||||
 _____( delimiter_symbol,         0,   7,   INI_EQUALS                ) \
 | 
			
		||||
 _____( case_sensitive,           7,   1,   false                     )/*
 | 
			
		||||
                                                                      */\
 | 
			
		||||
 _____( semicolon_marker,         8,   2,   INI_DISABLED_OR_COMMENT   ) \
 | 
			
		||||
 _____( hash_marker,              10,  2,   INI_DISABLED_OR_COMMENT   ) \
 | 
			
		||||
 _____( section_paths,            12,  2,   INI_ABSOLUTE_AND_RELATIVE ) \
 | 
			
		||||
 _____( multiline_nodes,          14,  2,   INI_MULTILINE_EVERYWHERE  )/*
 | 
			
		||||
                                                                      */\
 | 
			
		||||
 _____( no_single_quotes,         16,  1,   false                     ) \
 | 
			
		||||
 _____( no_double_quotes,         17,  1,   false                     ) \
 | 
			
		||||
 _____( no_spaces_in_names,       18,  1,   false                     ) \
 | 
			
		||||
 _____( implicit_is_not_empty,    19,  1,   false                     ) \
 | 
			
		||||
 _____( do_not_collapse_values,   20,  1,   false                     ) \
 | 
			
		||||
 _____( preserve_empty_quotes,    21,  1,   false                     ) \
 | 
			
		||||
 _____( disabled_after_space,     22,  1,   false                     ) \
 | 
			
		||||
 _____( disabled_can_be_implicit, 23,  1,   false                     )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Checks whether a format does **not** support escape sequences
 | 
			
		||||
**/
 | 
			
		||||
#define INIFORMAT_HAS_NO_ESC(FORMAT) \
 | 
			
		||||
    (FORMAT.multiline_nodes == INI_NO_MULTILINE && \
 | 
			
		||||
    FORMAT.no_double_quotes && FORMAT.no_single_quotes)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PUBLIC TYPEDEFS  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  24-bit bitfield representing the format of an INI file (INI
 | 
			
		||||
            dialect)
 | 
			
		||||
**/
 | 
			
		||||
typedef _LIBCONFINI_INIFORMAT_TYPE_ IniFormat;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Global statistics about an INI file
 | 
			
		||||
**/
 | 
			
		||||
typedef struct IniStatistics {
 | 
			
		||||
    const IniFormat format;
 | 
			
		||||
    const size_t bytes;
 | 
			
		||||
    const size_t members;
 | 
			
		||||
} IniStatistics;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Dispatch of a single INI node
 | 
			
		||||
**/
 | 
			
		||||
typedef struct IniDispatch {
 | 
			
		||||
    const IniFormat format;
 | 
			
		||||
    uint8_t type;
 | 
			
		||||
    char * data;
 | 
			
		||||
    char * value;
 | 
			
		||||
    const char * append_to;
 | 
			
		||||
    size_t d_len;
 | 
			
		||||
    size_t v_len;
 | 
			
		||||
    size_t at_len;
 | 
			
		||||
    size_t dispatch_id;
 | 
			
		||||
} IniDispatch;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  The unique ID of an INI format (24-bit maximum)
 | 
			
		||||
**/
 | 
			
		||||
typedef uint32_t IniFormatNum;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Callback function for handling an #IniStatistics structure
 | 
			
		||||
**/
 | 
			
		||||
typedef int (* IniStatsHandler) (
 | 
			
		||||
    IniStatistics * statistics,
 | 
			
		||||
    void * user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Callback function for handling an #IniDispatch structure
 | 
			
		||||
**/
 | 
			
		||||
typedef int (* IniDispHandler) (
 | 
			
		||||
    IniDispatch * dispatch,
 | 
			
		||||
    void * user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Callback function for handling an INI string belonging to a
 | 
			
		||||
            sequence of INI strings
 | 
			
		||||
**/
 | 
			
		||||
typedef int (* IniStrHandler) (
 | 
			
		||||
    char * ini_string,
 | 
			
		||||
    size_t string_length,
 | 
			
		||||
    size_t string_num,
 | 
			
		||||
    IniFormat format,
 | 
			
		||||
    void * user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Callback function for handling a selected fragment of an INI string
 | 
			
		||||
**/
 | 
			
		||||
typedef int (* IniSubstrHandler) (
 | 
			
		||||
    const char * ini_string,
 | 
			
		||||
    size_t fragm_offset,
 | 
			
		||||
    size_t fragm_length,
 | 
			
		||||
    size_t fragm_num,
 | 
			
		||||
    IniFormat format,
 | 
			
		||||
    void * user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PUBLIC FUNCTIONS  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int strip_ini_cache (
 | 
			
		||||
    register char * const ini_source,
 | 
			
		||||
    const size_t ini_length,
 | 
			
		||||
    const IniFormat format,
 | 
			
		||||
    const IniStatsHandler f_init,
 | 
			
		||||
    const IniDispHandler f_foreach,
 | 
			
		||||
    void * const user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int load_ini_file (
 | 
			
		||||
    FILE * const ini_file,
 | 
			
		||||
    const IniFormat format,
 | 
			
		||||
    const IniStatsHandler f_init,
 | 
			
		||||
    const IniDispHandler f_foreach,
 | 
			
		||||
    void * const user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int load_ini_path (
 | 
			
		||||
    const char * const path,
 | 
			
		||||
    const IniFormat format,
 | 
			
		||||
    const IniStatsHandler f_init,
 | 
			
		||||
    const IniDispHandler f_foreach,
 | 
			
		||||
    void * const user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern bool ini_string_match_ss (
 | 
			
		||||
    const char * const simple_string_a,
 | 
			
		||||
    const char * const simple_string_b,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern bool ini_string_match_si (
 | 
			
		||||
    const char * const simple_string,
 | 
			
		||||
    const char * const ini_string,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern bool ini_string_match_ii (
 | 
			
		||||
    const char * const ini_string_a,
 | 
			
		||||
    const char * const ini_string_b,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern bool ini_array_match (
 | 
			
		||||
    const char * const ini_string_a,
 | 
			
		||||
    const char * const ini_string_b,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern size_t ini_unquote (
 | 
			
		||||
    char * const ini_string,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern size_t ini_string_parse (
 | 
			
		||||
    char * const ini_string,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern size_t ini_array_get_length (
 | 
			
		||||
    const char * const ini_string,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ini_array_foreach (
 | 
			
		||||
    const char * const ini_string,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format,
 | 
			
		||||
    const IniSubstrHandler f_foreach,
 | 
			
		||||
    void * const user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern size_t ini_array_shift (
 | 
			
		||||
    const char ** const ini_strptr,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern size_t ini_array_collapse (
 | 
			
		||||
    char * const ini_string,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern char * ini_array_break (
 | 
			
		||||
    char * const ini_string,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern char * ini_array_release (
 | 
			
		||||
    char ** const ini_strptr,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ini_array_split (
 | 
			
		||||
    char * const ini_string,
 | 
			
		||||
    const char delimiter,
 | 
			
		||||
    const IniFormat format,
 | 
			
		||||
    const IniStrHandler f_foreach,
 | 
			
		||||
    void * const user_data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void ini_global_set_lowercase_mode (
 | 
			
		||||
    const bool lowercase
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void ini_global_set_implicit_value (
 | 
			
		||||
    char * const implicit_value,
 | 
			
		||||
    const size_t implicit_v_len
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern IniFormatNum ini_fton (
 | 
			
		||||
    const IniFormat format
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern IniFormat ini_ntof (
 | 
			
		||||
    const IniFormatNum format_id
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ini_get_bool (
 | 
			
		||||
    const char * const ini_string,
 | 
			
		||||
    const int when_fail
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PUBLIC LINKS  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int (* const ini_get_int) (
 | 
			
		||||
    const char * ini_string
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern long int (* const ini_get_lint) (
 | 
			
		||||
    const char * ini_string
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern long long int (* const ini_get_llint) (
 | 
			
		||||
    const char * ini_string
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern double (* const ini_get_double) (
 | 
			
		||||
    const char * ini_string
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Legacy support, soon to be replaced with a `float` data type --
 | 
			
		||||
            please **do not use `ini_get_float()`!**
 | 
			
		||||
**/
 | 
			
		||||
#define ini_get_float \
 | 
			
		||||
    _Pragma("GCC warning \"function `ini_get_float()` is deprecated for parsing a `double` data type; use `ini_get_double()` instead\"") \
 | 
			
		||||
    ini_get_double
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  PUBLIC CONSTANTS AND VARIABLES  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Error mask (flags not present in user-generated interruptions)
 | 
			
		||||
**/
 | 
			
		||||
#define CONFINI_ERROR 252
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Error codes
 | 
			
		||||
**/
 | 
			
		||||
enum ConfiniInterruptNo {
 | 
			
		||||
    CONFINI_SUCCESS = 0,    /**< There have been no interruptions, everything
 | 
			
		||||
                                 went well [value=0] **/
 | 
			
		||||
    CONFINI_IINTR = 1,      /**< Interrupted by the user during `f_init()`
 | 
			
		||||
                                 [value=1] **/
 | 
			
		||||
    CONFINI_FEINTR = 2,     /**< Interrupted by the user during `f_foreach()`
 | 
			
		||||
                                 [value=2] **/
 | 
			
		||||
    CONFINI_ENOENT = 4,     /**< File inaccessible [value=4] **/
 | 
			
		||||
    CONFINI_ENOMEM = 5,     /**< Error allocating virtual memory [value=5] **/
 | 
			
		||||
    CONFINI_EIO = 6,        /**< Error reading the file [value=6] **/
 | 
			
		||||
    CONFINI_EOOR = 7,       /**< Out-of-range error: callbacks are more than
 | 
			
		||||
                                 expected [value=7] **/
 | 
			
		||||
    CONFINI_EBADF = 8,      /**< The stream specified is not a seekable stream
 | 
			
		||||
                                 [value=8] **/
 | 
			
		||||
    CONFINI_EFBIG = 9,      /**< File too large [value=9] **/
 | 
			
		||||
    CONFINI_EROADDR = 10    /**< Address is read-only [value=10] **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  INI node types
 | 
			
		||||
**/
 | 
			
		||||
enum IniNodeType {
 | 
			
		||||
    INI_UNKNOWN = 0,            /**< This is a node impossible to categorize
 | 
			
		||||
                                     [value=0] **/
 | 
			
		||||
    INI_VALUE = 1,              /**< Not used by **libconfini** (values are
 | 
			
		||||
                                     dispatched together with keys) -- but
 | 
			
		||||
                                     available for user's implementations
 | 
			
		||||
                                     [value=1] **/
 | 
			
		||||
    INI_KEY = 2,                /**< This is a key [value=2] **/
 | 
			
		||||
    INI_SECTION = 3,            /**< This is a section or a section path
 | 
			
		||||
                                     [value=3] **/
 | 
			
		||||
    INI_COMMENT = 4,            /**< This is a comment [value=4] **/
 | 
			
		||||
    INI_INLINE_COMMENT = 5,     /**< This is an inline comment [value=5] **/
 | 
			
		||||
    INI_DISABLED_KEY = 6,       /**< This is a disabled key [value=6] **/
 | 
			
		||||
    INI_DISABLED_SECTION = 7    /**< This is a disabled section path
 | 
			
		||||
                                     [value=7] **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Common array and key-value delimiters (but a delimiter may also be
 | 
			
		||||
            any other ASCII character not present in this list)
 | 
			
		||||
**/
 | 
			
		||||
enum IniDelimiters {
 | 
			
		||||
    INI_ANY_SPACE = 0,  /**< In multi-line INIs:
 | 
			
		||||
                             `/(?:\\(?:\n\r?|\r\n?)|[\t \v\f])+/`, in
 | 
			
		||||
                             non-multi-line INIs: `/[\t \v\f])+/` **/
 | 
			
		||||
    INI_EQUALS = '=',   /**< Equals character (`=`) **/
 | 
			
		||||
    INI_COLON = ':',    /**< Colon character (`:`) **/
 | 
			
		||||
    INI_DOT = '.',      /**< Dot character (`.`) **/
 | 
			
		||||
    INI_COMMA = ','     /**< Comma character (`,`) **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Possible values of #IniFormat::semicolon_marker and
 | 
			
		||||
            #IniFormat::hash_marker (i.e., meaning of `/\s+;/` and `/\s+#/` in
 | 
			
		||||
            respect to a format)
 | 
			
		||||
**/
 | 
			
		||||
enum IniCommentMarker {
 | 
			
		||||
    INI_DISABLED_OR_COMMENT = 0,    /**< This marker opens a comment or a
 | 
			
		||||
                                         disabled entry **/
 | 
			
		||||
    INI_ONLY_COMMENT = 1,           /**< This marker opens a comment **/
 | 
			
		||||
    INI_IGNORE = 2,                 /**< This marker opens a comment that has
 | 
			
		||||
                                         been marked for deletion and must not
 | 
			
		||||
                                         be dispatched or counted **/
 | 
			
		||||
    INI_IS_NOT_A_MARKER = 3         /**< This is not a marker at all, but a
 | 
			
		||||
                                         normal character instead **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Possible values of #IniFormat::section_paths
 | 
			
		||||
**/
 | 
			
		||||
enum IniSectionPaths {
 | 
			
		||||
    INI_ABSOLUTE_AND_RELATIVE = 0,  /**< Section paths starting with a dot
 | 
			
		||||
                                         express nesting to the current parent,
 | 
			
		||||
                                         to root otherwise **/
 | 
			
		||||
    INI_ABSOLUTE_ONLY = 1,          /**< Section paths starting with a dot will
 | 
			
		||||
                                         be cleaned of their leading dot and
 | 
			
		||||
                                         appended to root **/
 | 
			
		||||
    INI_ONE_LEVEL_ONLY = 2,         /**< Format supports sections, but the dot
 | 
			
		||||
                                         does not express nesting and is not a
 | 
			
		||||
                                         meta-character **/
 | 
			
		||||
    INI_NO_SECTIONS = 3             /**< Format does *not* support sections --
 | 
			
		||||
                                         `/\[[^\]]*\]/g`, if any, will be
 | 
			
		||||
                                         treated as keys! **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Possible values of #IniFormat::multiline_nodes
 | 
			
		||||
**/
 | 
			
		||||
enum IniMultiline {
 | 
			
		||||
    INI_MULTILINE_EVERYWHERE = 0,       /**< Comments, section paths and keys
 | 
			
		||||
                                             -- disabled or not -- are allowed
 | 
			
		||||
                                             to be multi-line **/
 | 
			
		||||
    INI_BUT_COMMENTS = 1,               /**< Only section paths and keys --
 | 
			
		||||
                                             disabled or not -- are allowed to
 | 
			
		||||
                                             be multi-line **/
 | 
			
		||||
    INI_BUT_DISABLED_AND_COMMENTS = 2,  /**< Only active section paths and
 | 
			
		||||
                                             active keys are allowed to be
 | 
			
		||||
                                             multi-line **/
 | 
			
		||||
    INI_NO_MULTILINE = 3                /**< Multi-line escape sequences are
 | 
			
		||||
                                             disabled **/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  A model format for standard INI files
 | 
			
		||||
**/
 | 
			
		||||
static const IniFormat INI_DEFAULT_FORMAT = _LIBCONFINI_DEFAULT_FORMAT_;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  A model format for Unix-like .conf files (where space characters
 | 
			
		||||
            are delimiters between keys and values)
 | 
			
		||||
**/
 | 
			
		||||
/*  All fields are set to `0` here.  */
 | 
			
		||||
static const IniFormat INI_UNIXLIKE_FORMAT = _LIBCONFINI_UNIXLIKE_FORMAT_;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  If set to `true`, key and section names in case-insensitive INI
 | 
			
		||||
            formats will be dispatched lowercase, verbatim otherwise (default
 | 
			
		||||
            value: `false`)
 | 
			
		||||
**/
 | 
			
		||||
extern bool INI_GLOBAL_LOWERCASE_MODE;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Value to be assigned to implicit keys (default value: `NULL`)
 | 
			
		||||
**/
 | 
			
		||||
extern char * INI_GLOBAL_IMPLICIT_VALUE;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
    @brief  Length of the value assigned to implicit keys (default value: `0`)
 | 
			
		||||
**/
 | 
			
		||||
extern size_t INI_GLOBAL_IMPLICIT_V_LEN;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  CLEAN THE PRIVATE ENVIRONMENT  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#undef _LIBCONFINI_UNIXLIKE_FORMAT_
 | 
			
		||||
#undef _LIBCONFINI_DEFAULT_FORMAT_
 | 
			
		||||
#undef _LIBCONFINI_INIFORMAT_TYPE_
 | 
			
		||||
#undef __INIFORMAT_TABLE_CB_ZERO__
 | 
			
		||||
#undef __INIFORMAT_TABLE_CB_DEFAULT__
 | 
			
		||||
#undef __INIFORMAT_TABLE_CB_FIELDS__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  END OF `_LIBCONFINI_HEADER_`  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  EOF  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6277
									
								
								include/mongoose.h
									
										
									
									
									
								
							
							
						
						
									
										6277
									
								
								include/mongoose.h
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										7151
									
								
								include/mpack.h
									
										
									
									
									
								
							
							
						
						
									
										7151
									
								
								include/mpack.h
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue