core: Import cJSON code from the payproc project.
authorWerner Koch <>
Wed, 14 Mar 2018 09:55:52 +0000 (10:55 +0100)
committerWerner Koch <>
Wed, 14 Mar 2018 10:10:12 +0000 (11:10 +0100)
core: Import cJSON code from the payproc project.

* src/cJSON.c: New.
* src/cJSON.h: New.
* src/cJSON.readme: New.

This is a copy of the code from the payproc commit
af5d6b4f820ee19e246a2cab6f56465fe91f1233.  The code was originally
added to payproc with the commit below.

Signed-off-by: Werner Koch <>
commit 7ae7ef29bc5ec19e005e6a5a739233d655f3f05f
Author:     Werner Koch <>
AuthorDate: Wed Apr 2 09:01:42 2014 +0200
Commit:     Werner Koch <>
CommitDate: Wed Apr 2 09:12:02 2014 +0200

Simplify cJSON and add new macros.

* src/cJSON.h: Re-indented.
(cjson_t): New.
(cjson_is_): New macros.
* src/cJSON.c: Re-indented.  Include errno.h and our util.h.
(ep): Remove global var.
(cJSON_GetErrorPtr): Remove.
(cJSON_strcasecmp): Cast args for use with tolower.
(cJSON_malloc, cJSON_free): Remove.  Change callers to use xtrymalloc
and xfree.
(cJSON_InitHooks): Remove.
(cJSON_strdup): Remove.  Change callers to use xtrystrdup.
(cJSON_New_Item): Simplify.
(cJSON_ParseWithOpts, cJSON_Parse): Add arg R_ERROFF.
(parse_string, parse_value, parse_array, parse_object): Add arg EP.

cJSON has been taken from  The README file has been
renamed to cJSON.readme and the files have been changed to GNU coding
standards.  Because that parser is small enough to be source copied it
does not make sense to treat it as a library and I changed the memory
allocation functions to the usual xmalloc ones. The only external
dependency now is out util.h which declares those functions.

The lowercase cjson_t better fits into our coding style as well as the
new macros.  Thanks to Dave Gamble for this nice parser.
src/cJSON.c [new file with mode: 0644]
src/cJSON.h [new file with mode: 0644]
src/cJSON.readme [new file with mode: 0644]