From 05019cb0ee85cae4731c19c654d470b07fcb774e Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 28 May 2015 18:09:39 +1000 Subject: [PATCH] Remove cJSON blob (can re-add later from source) --- common.mk | 2 +- include/json/cJSON.h | 134 ------------------------------------------- lib/libjson.a | Bin 31274 -> 0 bytes 3 files changed, 1 insertion(+), 135 deletions(-) delete mode 100644 include/json/cJSON.h delete mode 100644 lib/libjson.a diff --git a/common.mk b/common.mk index afeaa0e..1d17564 100644 --- a/common.mk +++ b/common.mk @@ -56,7 +56,7 @@ OBJCOPY = $(CROSS)objcopy COMPONENTS ?= FreeRTOS lwip # libraries to link, mainly blobs provided by the esp-iot-rtos SDK -LIBS ?= gcc json main net80211 phy pp ssl wpa hal +LIBS ?= gcc main net80211 phy pp ssl wpa hal CFLAGS = -Wall -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -std=gnu99 LDFLAGS = -nostdlib -Wl,--no-check-sections -Wl,-L$(ROOT)lib -u call_user_start -Wl,-static -Wl,-Map=build/${TARGET}.map diff --git a/include/json/cJSON.h b/include/json/cJSON.h deleted file mode 100644 index 992c48a..0000000 --- a/include/json/cJSON.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright (c) 2009 Dave Gamble - - 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 - -/* cJSON Types: */ -#define cJSON_False 0 -#define cJSON_True 1 -#define cJSON_NULL 2 -#define cJSON_Number 3 -#define cJSON_String 4 -#define cJSON_Array 5 -#define cJSON_Object 6 - -#define cJSON_IsReference 256 - -/* The cJSON structure: */ -typedef struct cJSON { - struct cJSON *next, *prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ - struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ - - int type; /* The type of the item, as above. */ - - char *valuestring; /* The item's string, if type==cJSON_String */ - int valueint; /* The item's number, if type==cJSON_Number */ - double valuedouble; /* The item's number, if type==cJSON_Number */ - - char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ -} cJSON; - -/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */ -cJSON *cJSON_Parse(const char *value); -/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */ -char *cJSON_Print(cJSON *item); -/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */ -char *cJSON_PrintUnformatted(cJSON *item); -/* Delete a cJSON entity and all subentities. */ -void cJSON_Delete(cJSON *c); - -/* Returns the number of items in an array (or object). */ -int cJSON_GetArraySize(cJSON *array); -/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ -cJSON *cJSON_GetArrayItem(cJSON *array, int item); -/* Get item "string" from object. Case insensitive. */ -cJSON *cJSON_GetObjectItem(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. */ -const char *cJSON_GetErrorPtr(void); - -/* These calls create a cJSON item of the appropriate type. */ -cJSON *cJSON_CreateNull(void); -cJSON *cJSON_CreateTrue(void); -cJSON *cJSON_CreateFalse(void); -cJSON *cJSON_CreateBool(int b); -cJSON *cJSON_CreateNumber(double num); -cJSON *cJSON_CreateString(const char *string); -cJSON *cJSON_CreateArray(void); -cJSON *cJSON_CreateObject(void); - -/* These utilities create an Array of count items. */ -cJSON *cJSON_CreateIntArray(const int *numbers, int count); -cJSON *cJSON_CreateFloatArray(const float *numbers, int count); -cJSON *cJSON_CreateDoubleArray(const double *numbers, int count); -cJSON *cJSON_CreateStringArray(const char **strings, int count); - -/* Append item to the specified array/object. */ -void cJSON_AddItemToArray(cJSON *array, cJSON *item); -void cJSON_AddItemToObject(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. */ -void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); -void cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item); - -/* Remove/Detatch items from Arrays/Objects. */ -cJSON *cJSON_DetachItemFromArray(cJSON *array, int which); -void cJSON_DeleteItemFromArray(cJSON *array, int which); -cJSON *cJSON_DetachItemFromObject(cJSON *object, const char *string); -void cJSON_DeleteItemFromObject(cJSON *object, const char *string); - -/* Update array items. */ -void cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem); -void cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem); - -/* Duplicate a cJSON item */ -cJSON *cJSON_Duplicate(cJSON *item, int 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. */ - -/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ -cJSON *cJSON_ParseWithOpts(const char *value, const char **return_parse_end, int require_null_terminated); - -void cJSON_Minify(char *json); - -/* Macros for creating things quickly. */ -#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) -#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) -#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) -#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) -#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) -#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) - -/* When assigning an integer value, it needs to be propagated to valuedouble too. */ -#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/lib/libjson.a b/lib/libjson.a deleted file mode 100644 index 179119ded5113ccfa0c7f2e984460730eb9684d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31274 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 z 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