releases-comm-central/third_party/json-c
Rob Lemley 4912dba9ee Bug 1672798 - Run black formatting on MZLA files in third_party. r=mkmelin
These will not be covered by CI for the moment because the global exclude does
not permit reincluding certain files. That deficiency in coverage can be addressed
in a follow-up bug.

Differential Revision: https://phabricator.services.mozilla.com/D95403

--HG--
extra : rebase_source : 984f3e236e2b0390ae9e374908d77fbf94603e5e
extra : histedit_source : b4e584a4c399820d36ba13eb44fe18c94d9252e0
2020-10-30 15:05:20 -04:00
..
AUTHORS Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
COPYING Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
ChangeLog Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
INSTALL Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
NEWS Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
README.html Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
README.md Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
RELEASE_CHECKLIST.txt Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
STYLE.txt Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
arraylist.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
arraylist.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
bits.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
config.h.in Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
config.h.win32 Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
debug.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
debug.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
issues_closed_for_0.13.md Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_c_version.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_c_version.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_config.h.in Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_config.h.win32 Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_inttypes.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_object.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_object.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_object_iterator.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_object_iterator.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_object_private.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_pointer.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_pointer.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_tokener.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_tokener.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_util.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_util.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_visit.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
json_visit.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
libjson.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
linkhash.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
linkhash.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
math_compat.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
moz.build Bug 1672798 - Run black formatting on MZLA files in third_party. r=mkmelin 2020-10-30 15:05:20 -04:00
printbuf.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
printbuf.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
random_seed.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
random_seed.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
snprintf_compat.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
strdup_compat.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
strerror_override.c Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
strerror_override.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
strerror_override_private.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00
vasprintf_compat.h Bug 1621782 - Import json-c sources into comm-central. r=kaie 2020-04-14 22:30:29 +00:00

README.md

json-c

  1. Overview and Build Status
  2. Building on Unix
  3. Install Prerequisites
  4. Building with partial threading support
  5. Linking to libjson-c
  6. Using json-c

JSON-C - A JSON implementation in C

Build Status

JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C, output them as JSON formatted strings and parse JSON formatted strings back into the C representation of JSON objects. It aims to conform to RFC 7159.

Building on Unix with git, gcc and autotools

Home page for json-c: https://github.com/json-c/json-c/wiki

Prerequisites:

See also the "Installing prerequisites" section below.

  • gcc, clang, or another C compiler
  • libtool>=2.2.6b

If you're not using a release tarball, you'll also need:

  • autoconf>=2.64 (autoreconf)
  • automake>=1.13

Make sure you have a complete libtool install, including libtoolize.

To generate docs (e.g. as part of make distcheck) you'll also need:

  • doxygen>=1.8.13

Build instructions:

json-c GitHub repo: https://github.com/json-c/json-c

$ git clone https://github.com/json-c/json-c.git
$ cd json-c
$ sh autogen.sh

followed by

$ ./configure  # --enable-threading
$ make
$ make install

To build and run the test programs:

$ make check
$ make USE_VALGRIND=0 check   # optionally skip using valgrind

Install prerequisites

If you are on a relatively modern system, you'll likely be able to install the prerequisites using your OS's packaging system.

Install using apt (e.g. Ubuntu 16.04.2 LTS)

sudo apt install git
sudo apt install autoconf automake libtool
sudo apt install valgrind # optional

Then start from the "git clone" command, above.

Manually install and build autoconf, automake and libtool

For older OS's that don't have up-to-date version of the packages will require a bit more work. For example, CentOS release 5.11, etc...

curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
curl -O http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
curl -O http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz

tar xzf autoconf-2.69.tar.gz
tar xzf automake-1.15.tar.gz
tar xzf libtool-2.2.6b.tar.gz

export PATH=${HOME}/ac_install/bin:$PATH

(cd autoconf-2.69 && \
  ./configure --prefix ${HOME}/ac_install && \
  make && \
  make install)

(cd automake-1.15 && \
  ./configure --prefix ${HOME}/ac_install && \
  make && \
  make install)

(cd libtool-2.2.6b && \
  ./configure --prefix ${HOME}/ac_install && \
  make && \
  make install)

Building with partial threading support

Although json-c does not support fully multi-threaded access to object trees, it has some code to help make use in threaded programs a bit safer. Currently, this is limited to using atomic operations for json_object_get() and json_object_put().

Since this may have a performance impact, of at least 3x slower according to https://stackoverflow.com/a/11609063, it is disabled by default. You may turn it on by adjusting your configure command with: --enable-threading

Separately, the default hash function used for object field keys, lh_char_hash, uses a compare-and-swap operation to ensure the randomly seed is only generated once. Because this is a one-time operation, it is always compiled in when the compare-and-swap operation is available.

Linking to libjson-c

If your system has pkgconfig, then you can just add this to your makefile:

CFLAGS += $(shell pkg-config --cflags json-c)
LDFLAGS += $(shell pkg-config --libs json-c)

Without pkgconfig, you would do something like this:

JSON_C_DIR=/path/to/json_c/install
CFLAGS += -I$(JSON_C_DIR)/include/json-c
LDFLAGS+= -L$(JSON_C_DIR)/lib -ljson-c

Using json-c

To use json-c you can either include json.h, or preferrably, one of the following more specific header files:

  • json_object.h - Core types and methods.
  • json_tokener.h - Methods for parsing and serializing json-c object trees.
  • json_pointer.h - JSON Pointer (RFC 6901) implementation for retrieving objects from a json-c object tree.
  • json_object_iterator.h - Methods for iterating over single json_object instances.
  • json_visit.h - Methods for walking a tree of json-c objects.
  • json_util.h - Miscelleanous utility functions.

For a full list of headers see files.html