KJSON_PUTINT(3) Library Functions Manual KJSON_PUTINT(3)

kjson_putint, kjson_putintp, kjson_putintstr, kjson_putintstrp, kjson_string_putintput integer content for kcgijson

library “libkcgijson”

#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
#include <kcgijson.h>

enum kcgi_err
kjson_putint(struct kjsonreq *req, int64_t v);

enum kcgi_err
kjson_putintp(struct kjsonreq *req, const char *name, int64_t v);

enum kcgi_err
kjson_string_putint(struct kjsonreq *req, int64_t v);

enum kcgi_err
kjson_putintstr(struct kjsonreq *r, int64_t v);

enum kcgi_err
kjson_putintstrp(struct kjsonreq *r, const char *name, int64_t v);

Write a 64-bit integer v to a context req initialised with khtml_open(3). This formats the value as [-]?[0-9]+.

The () and () forms are for array scopes, kjson_putintp() and kjson_putintstrp() for objects, and () for open strings.

Since JavaScript is limited to 53 bits, it's possible that integers may be truncated with () and family. The alternative forms, () and kjson_putintstrp(), emit the value within a string. This allows the JavaScript to parse the integer and handle overflow and underflow explicitly.

Passing a NULL value to name for () or () is equivalent to calling kjson_putint() or kjson_putintstr(), respectively.

Returns an enum kcgi_err indicating the error state.

Success (not an error).
Internal memory allocation failure.
The output connection has been terminated. For FastCGI connections, the current connection should be released with khttp_free(3) and parse loop reentered.
The connection is still expecting headers with khttp_head(3). Indicates that khttp_body(3) did not return with success or was not invoked. For FastCGI connections, the current connection should be released with khttp_free(3) and parse loop reentered.
Internal system error writing to the output stream.
The incorrect form was used for the current scope, for example, an array-type write within an object.

The following outputs a simple JSON document. It assumes r is a struct kreq pointer. For brevity, it does not do any error checking.

khttp_head(r, kresps[KRESP_STATUS],
  "%s", khttps[KHTTP_200]);
khttp_head(r, kresps[KRESP_CONTENT_TYPE],
  "%s", kmimetypes[KMIME_APP_JSON]);
khttp_body(r);
kjson_open(&req, r);
kjson_obj_open(&req);
kjson_putintp(&req, "bar", 12345);
kjson_arrayp_open(&req, "baz");
kjson_putint(&req, 1)); /* 1 */
kjson_putintstr(&req, 1)); /* "1" */
kjson_close(&req);

kcgijson(3)

Written by Kristaps Dzonsons <kristaps@bsd.lv>.

December 2, 2023 OpenBSD 7.4