Annotation of embedaddon/iperf/src/cjson.h, revision 1.1.1.2

1.1       misho       1: /*
1.1.1.2 ! misho       2:   Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
        !             3: 
1.1       misho       4:   Permission is hereby granted, free of charge, to any person obtaining a copy
                      5:   of this software and associated documentation files (the "Software"), to deal
                      6:   in the Software without restriction, including without limitation the rights
                      7:   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
                      8:   copies of the Software, and to permit persons to whom the Software is
                      9:   furnished to do so, subject to the following conditions:
1.1.1.2 ! misho      10: 
1.1       misho      11:   The above copyright notice and this permission notice shall be included in
                     12:   all copies or substantial portions of the Software.
1.1.1.2 ! misho      13: 
1.1       misho      14:   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                     15:   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                     16:   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
                     17:   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                     18:   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
                     19:   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
                     20:   THE SOFTWARE.
                     21: */
1.1.1.2 ! misho      22: #include "iperf_config.h"
1.1       misho      23: 
                     24: #ifndef cJSON__h
                     25: #define cJSON__h
                     26: 
1.1.1.2 ! misho      27: #ifdef HAVE_STDINT_H
        !            28: #include <stdint.h>
        !            29: #endif
        !            30: 
1.1       misho      31: #ifdef __cplusplus
                     32: extern "C"
                     33: {
                     34: #endif
                     35: 
1.1.1.2 ! misho      36: #if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
        !            37: #define __WINDOWS__
        !            38: #endif
        !            39: 
        !            40: #ifdef __WINDOWS__
        !            41: 
        !            42: /* 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:
        !            43: 
        !            44: CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
        !            45: CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
        !            46: CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
        !            47: 
        !            48: For *nix builds that support visibility attribute, you can define similar behavior by
        !            49: 
        !            50: setting default visibility to hidden by adding
        !            51: -fvisibility=hidden (for gcc)
        !            52: or
        !            53: -xldscope=hidden (for sun cc)
        !            54: to CFLAGS
        !            55: 
        !            56: then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
        !            57: 
        !            58: */
        !            59: 
        !            60: #define CJSON_CDECL __cdecl
        !            61: #define CJSON_STDCALL __stdcall
        !            62: 
        !            63: /* export symbols by default, this is necessary for copy pasting the C and header file */
        !            64: #if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
        !            65: #define CJSON_EXPORT_SYMBOLS
        !            66: #endif
        !            67: 
        !            68: #if defined(CJSON_HIDE_SYMBOLS)
        !            69: #define CJSON_PUBLIC(type)   type CJSON_STDCALL
        !            70: #elif defined(CJSON_EXPORT_SYMBOLS)
        !            71: #define CJSON_PUBLIC(type)   __declspec(dllexport) type CJSON_STDCALL
        !            72: #elif defined(CJSON_IMPORT_SYMBOLS)
        !            73: #define CJSON_PUBLIC(type)   __declspec(dllimport) type CJSON_STDCALL
        !            74: #endif
        !            75: #else /* !__WINDOWS__ */
        !            76: #define CJSON_CDECL
        !            77: #define CJSON_STDCALL
        !            78: 
        !            79: #if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
        !            80: #define CJSON_PUBLIC(type)   __attribute__((visibility("default"))) type
        !            81: #else
        !            82: #define CJSON_PUBLIC(type) type
        !            83: #endif
        !            84: #endif
        !            85: 
        !            86: /* project version */
        !            87: #define CJSON_VERSION_MAJOR 1
        !            88: #define CJSON_VERSION_MINOR 7
        !            89: #define CJSON_VERSION_PATCH 13
        !            90: 
        !            91: #include <stddef.h>
        !            92: 
1.1       misho      93: /* cJSON Types: */
1.1.1.2 ! misho      94: #define cJSON_Invalid (0)
1.1       misho      95: #define cJSON_False  (1 << 0)
                     96: #define cJSON_True   (1 << 1)
                     97: #define cJSON_NULL   (1 << 2)
                     98: #define cJSON_Number (1 << 3)
                     99: #define cJSON_String (1 << 4)
                    100: #define cJSON_Array  (1 << 5)
                    101: #define cJSON_Object (1 << 6)
1.1.1.2 ! misho     102: #define cJSON_Raw    (1 << 7) /* raw json */
        !           103: 
1.1       misho     104: #define cJSON_IsReference 256
                    105: #define cJSON_StringIsConst 512
                    106: 
                    107: /* The cJSON structure: */
1.1.1.2 ! misho     108: typedef struct cJSON
        !           109: {
        !           110:     /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
        !           111:     struct cJSON *next;
        !           112:     struct cJSON *prev;
        !           113:     /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
        !           114:     struct cJSON *child;
        !           115: 
        !           116:     /* The type of the item, as above. */
        !           117:     int type;
        !           118: 
        !           119:     /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
        !           120:     char *valuestring;
        !           121:     /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
        !           122:     int64_t valueint;
        !           123:     /* The item's number, if type==cJSON_Number */
        !           124:     double valuedouble;
1.1       misho     125: 
1.1.1.2 ! misho     126:     /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
        !           127:     char *string;
1.1       misho     128: } cJSON;
                    129: 
1.1.1.2 ! misho     130: typedef struct cJSON_Hooks
        !           131: {
        !           132:       /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
        !           133:       void *(CJSON_CDECL *malloc_fn)(size_t sz);
        !           134:       void (CJSON_CDECL *free_fn)(void *ptr);
1.1       misho     135: } cJSON_Hooks;
                    136: 
1.1.1.2 ! misho     137: typedef int cJSON_bool;
1.1       misho     138: 
1.1.1.2 ! misho     139: /* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
        !           140:  * This is to prevent stack overflows. */
        !           141: #ifndef CJSON_NESTING_LIMIT
        !           142: #define CJSON_NESTING_LIMIT 1000
        !           143: #endif
1.1       misho     144: 
1.1.1.2 ! misho     145: /* returns the version of cJSON as a string */
        !           146: CJSON_PUBLIC(const char*) cJSON_Version(void);
        !           147: 
        !           148: /* Supply malloc, realloc and free functions to cJSON */
        !           149: CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
        !           150: 
        !           151: /* 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. */
        !           152: /* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
        !           153: CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
        !           154: CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);
        !           155: /* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
        !           156: /* 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(). */
        !           157: CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
        !           158: CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);
        !           159: 
        !           160: /* Render a cJSON entity to text for transfer/storage. */
        !           161: CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
        !           162: /* Render a cJSON entity to text for transfer/storage without any formatting. */
        !           163: CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
1.1       misho     164: /* 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 */
1.1.1.2 ! misho     165: CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
        !           166: /* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
        !           167: /* 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 */
        !           168: CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
1.1       misho     169: /* Delete a cJSON entity and all subentities. */
1.1.1.2 ! misho     170: CJSON_PUBLIC(void) cJSON_Delete(cJSON *item);
1.1       misho     171: 
                    172: /* Returns the number of items in an array (or object). */
1.1.1.2 ! misho     173: CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
        !           174: /* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
        !           175: CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
1.1       misho     176: /* Get item "string" from object. Case insensitive. */
1.1.1.2 ! misho     177: CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
        !           178: CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
        !           179: CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
1.1       misho     180: /* 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. */
1.1.1.2 ! misho     181: CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
        !           182: 
        !           183: /* Check item type and return its value */
        !           184: CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
        !           185: CJSON_PUBLIC(double) cJSON_GetNumberValue(cJSON *item);
        !           186: 
        !           187: /* These functions check the type of an item */
        !           188: CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
        !           189: CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
        !           190: CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
        !           191: CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
        !           192: CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
        !           193: CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
        !           194: CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
        !           195: CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
        !           196: CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
        !           197: CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
        !           198: 
1.1       misho     199: /* These calls create a cJSON item of the appropriate type. */
1.1.1.2 ! misho     200: CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
        !           201: CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
        !           202: CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
        !           203: CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
        !           204: CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
        !           205: CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
        !           206: /* raw json */
        !           207: CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
        !           208: CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
        !           209: CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
        !           210: 
        !           211: /* Create a string where valuestring references a string so
        !           212:  * it will not be freed by cJSON_Delete */
        !           213: CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
        !           214: /* Create an object/array that only references it's elements so
        !           215:  * they will not be freed by cJSON_Delete */
        !           216: CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
        !           217: CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
        !           218: 
        !           219: /* These utilities create an Array of count items.
        !           220:  * The parameter count cannot be greater than the number of elements in the number array, otherwise array access will be out of bounds.*/
        !           221: CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
        !           222: CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
        !           223: CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
        !           224: CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
1.1       misho     225: 
                    226: /* Append item to the specified array/object. */
1.1.1.2 ! misho     227: CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);
        !           228: CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
        !           229: /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
        !           230:  * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
        !           231:  * writing to `item->string` */
        !           232: CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
1.1       misho     233: /* 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. */
1.1.1.2 ! misho     234: CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
        !           235: CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
        !           236: 
        !           237: /* Remove/Detach items from Arrays/Objects. */
        !           238: CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
        !           239: CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
        !           240: CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
        !           241: CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
        !           242: CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
        !           243: CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
        !           244: CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
1.1       misho     245: 
                    246: /* Update array items. */
1.1.1.2 ! misho     247: CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
        !           248: CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
        !           249: CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
        !           250: CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
        !           251: CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
1.1       misho     252: 
                    253: /* Duplicate a cJSON item */
1.1.1.2 ! misho     254: CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
1.1       misho     255: /* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
1.1.1.2 ! misho     256:  * need to be released. With recurse!=0, it will duplicate any children connected to the item.
        !           257:  * The item->next and ->prev pointers are always zero on return from Duplicate. */
        !           258: /* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
        !           259:  * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
        !           260: CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
        !           261: 
        !           262: /* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
        !           263:  * The input pointer json cannot point to a read-only address area, such as a string constant, 
        !           264:  * but should point to a readable and writable adress area. */
        !           265: CJSON_PUBLIC(void) cJSON_Minify(char *json);
        !           266: 
        !           267: /* Helper functions for creating and adding items to an object at the same time.
        !           268:  * They return the added item or NULL on failure. */
        !           269: CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
        !           270: CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
        !           271: CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
        !           272: CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
        !           273: CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
        !           274: CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
        !           275: CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
        !           276: CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
        !           277: CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
1.1       misho     278: 
                    279: /* When assigning an integer value, it needs to be propagated to valuedouble too. */
1.1.1.2 ! misho     280: #define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
        !           281: /* helper for the cJSON_SetNumberValue macro */
        !           282: CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
        !           283: #define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
        !           284: /* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */
        !           285: CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring);
        !           286: 
        !           287: /* Macro for iterating over an array or object */
        !           288: #define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
        !           289: 
        !           290: /* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
        !           291: CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
        !           292: CJSON_PUBLIC(void) cJSON_free(void *object);
1.1       misho     293: 
                    294: #ifdef __cplusplus
                    295: }
                    296: #endif
                    297: 
                    298: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>