1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef JSON_H 3*4882a593Smuzhiyun #define JSON_H 1 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include "jsmn.h" 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun jsmntok_t *parse_json(const char *fn, char **map, size_t *size, int *len); 8*4882a593Smuzhiyun void free_json(char *map, size_t size, jsmntok_t *tokens); 9*4882a593Smuzhiyun int json_line(char *map, jsmntok_t *t); 10*4882a593Smuzhiyun const char *json_name(jsmntok_t *t); 11*4882a593Smuzhiyun int json_streq(char *map, jsmntok_t *t, const char *s); 12*4882a593Smuzhiyun int json_len(jsmntok_t *t); 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun extern int verbose; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <stdbool.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun extern int eprintf(int level, int var, const char *fmt, ...); 19*4882a593Smuzhiyun #define pr_fmt(fmt) fmt 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define pr_err(fmt, ...) \ 22*4882a593Smuzhiyun eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define pr_info(fmt, ...) \ 25*4882a593Smuzhiyun eprintf(1, verbose, pr_fmt(fmt), ##__VA_ARGS__) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define pr_debug(fmt, ...) \ 28*4882a593Smuzhiyun eprintf(2, verbose, pr_fmt(fmt), ##__VA_ARGS__) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #ifndef roundup 31*4882a593Smuzhiyun #define roundup(x, y) ( \ 32*4882a593Smuzhiyun { \ 33*4882a593Smuzhiyun const typeof(y) __y = y; \ 34*4882a593Smuzhiyun (((x) + (__y - 1)) / __y) * __y; \ 35*4882a593Smuzhiyun } \ 36*4882a593Smuzhiyun ) 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #endif 40