From c8993d9b71b152758a36287fb09c17f819d47de6 Mon Sep 17 00:00:00 2001 From: MrMelon Date: Sat, 24 Apr 2021 11:18:14 +0100 Subject: [PATCH] Add mjson.o --- obj/mjson.o | Bin 0 -> 55368 bytes src/intf/mjson.h | 159 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 obj/mjson.o create mode 100644 src/intf/mjson.h diff --git a/obj/mjson.o b/obj/mjson.o new file mode 100644 index 0000000000000000000000000000000000000000..859a2da3f2f4c93432ee51368aaa3103e3004376 GIT binary patch literal 55368 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 literal 0 HcmV?d00001 diff --git a/src/intf/mjson.h b/src/intf/mjson.h new file mode 100644 index 0000000..89fdb66 --- /dev/null +++ b/src/intf/mjson.h @@ -0,0 +1,159 @@ +/* Structures for JSON parsing using only fixed-extent memory + * + * This file is Copyright (c) 2010 by the GPSD project + * SPDX-License-Identifier: BSD-2-clause + */ + +#include +#include +#include +#ifdef TIME_ENABLE +#include +#endif /* TIME_ENABLE */ + +typedef enum {t_integer, t_uinteger, t_real, + t_string, t_boolean, t_character, + t_time, + t_object, t_structobject, t_array, + t_check, t_ignore, + t_short, t_ushort} + json_type; + +struct json_enum_t { + char *name; + int value; +}; + +struct json_array_t { + json_type element_type; + union { + struct { + const struct json_attr_t *subtype; + char *base; + size_t stride; + } objects; + struct { + char **ptrs; + char *store; + int storelen; + } strings; + struct { + int *store; + } integers; + struct { + unsigned int *store; + } uintegers; + struct { + short *store; + } shorts; + struct { + unsigned short *store; + } ushorts; + struct { + double *store; + } reals; + struct { + bool *store; + } booleans; + } arr; + int *count, maxlen; +}; + +struct json_attr_t { + char *attribute; + json_type type; + union { + int *integer; + unsigned int *uinteger; + short *shortint; + unsigned short *ushortint; + double *real; + char *string; + bool *boolean; + char *character; + const struct json_attr_t *attrs; + const struct json_array_t array; + size_t offset; + } addr; + union { + int integer; + unsigned int uinteger; + short shortint; + unsigned short ushortint; + double real; + bool boolean; + char character; + char *check; + } dflt; + size_t len; + const struct json_enum_t *map; + bool nodefault; +}; + +#define JSON_ATTR_MAX 31 /* max chars in JSON attribute name */ +#define JSON_VAL_MAX 512 /* max chars in JSON value part */ + +#ifdef __cplusplus +extern "C" { +#endif +int json_read_object(const char *, const struct json_attr_t *, + const char **); +int json_read_array(const char *, const struct json_array_t *, + const char **); +const char *json_error_string(int); + +#ifdef TIME_ENABLE +extern time_t timegm(struct tm *tm); +#endif /* TIME_ENABLE */ + +void json_enable_debug(int, FILE *); +#ifdef __cplusplus +} +#endif + +#define JSON_ERR_OBSTART 1 /* non-WS when expecting object start */ +#define JSON_ERR_ATTRSTART 2 /* non-WS when expecting attrib start */ +#define JSON_ERR_BADATTR 3 /* unknown attribute name */ +#define JSON_ERR_ATTRLEN 4 /* attribute name too long */ +#define JSON_ERR_NOARRAY 5 /* saw [ when not expecting array */ +#define JSON_ERR_NOBRAK 6 /* array element specified, but no [ */ +#define JSON_ERR_STRLONG 7 /* string value too long */ +#define JSON_ERR_TOKLONG 8 /* token value too long */ +#define JSON_ERR_BADTRAIL 9 /* garbage while expecting comma or } or ] */ +#define JSON_ERR_ARRAYSTART 10 /* didn't find expected array start */ +#define JSON_ERR_OBJARR 11 /* error while parsing object array */ +#define JSON_ERR_SUBTOOLONG 12 /* too many array elements */ +#define JSON_ERR_BADSUBTRAIL 13 /* garbage while expecting array comma */ +#define JSON_ERR_SUBTYPE 14 /* unsupported array element type */ +#define JSON_ERR_BADSTRING 15 /* error while string parsing */ +#define JSON_ERR_CHECKFAIL 16 /* check attribute not matched */ +#define JSON_ERR_NOPARSTR 17 /* can't support strings in parallel arrays */ +#define JSON_ERR_BADENUM 18 /* invalid enumerated value */ +#define JSON_ERR_QNONSTRING 19 /* saw quoted value when expecting nonstring */ +#define JSON_ERR_NONQSTRING 19 /* didn't see quoted value when expecting string */ +#define JSON_ERR_MISC 20 /* other data conversion error */ +#define JSON_ERR_BADNUM 21 /* error while parsing a numerical argument */ +#define JSON_ERR_NULLPTR 22 /* unexpected null value or attribute pointer */ +#define JSON_ERR_NOCURLY 23 /* object element specified, but no { */ +#define JSON_ERR_EMPTY 24 /* input was empty or white-space only */ + +/* + * Use the following macros to declare template initializers for structobject + * arrays. Writing the equivalents out by hand is error-prone. + * + * STRUCTOBJECT takes a structure name s, and a fieldname f in s. + * + * STRUCTARRAY takes the name of a structure array, a pointer to a an + * initializer defining the subobject type, and the address of an integer to + * store the length in. + */ +#define STRUCTOBJECT(s, f) .addr.offset = offsetof(s, f) +#define STRUCTARRAY(a, e, n) \ + .addr.array.element_type = t_structobject, \ + .addr.array.arr.objects.subtype = e, \ + .addr.array.arr.objects.base = (char*)a, \ + .addr.array.arr.objects.stride = sizeof(a[0]), \ + .addr.array.count = n, \ + .addr.array.maxlen = (int)(sizeof(a)/sizeof(a[0])) + +/* json.h ends here */