json.c
1 /*- 2 * Copyright (c) 2024-2025 Baptiste Daroussin <bapt@FreeBSD.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 #define JSMN_PARENT_LINKS 1 8 #define JSMN_STRICT 1 9 #include <jsmn.h> 10 #include <libpkg/private/json.h> 11 #include <stdio.h> 12 13 jsmntok_t * 14 jsmn_next(jsmntok_t *tok) { 15 jsmntok_t *cur = tok; 16 int cnt = tok->size; 17 18 while (cnt--) { 19 cur++; 20 cur = jsmn_next(cur); 21 } 22 return (cur); 23 } 24 25 bool 26 jsmntok_stringeq(jsmntok_t *tok, const char *line, const char *str) { 27 return (strncmp(str, line + tok->start, jsmn_toklen(tok)) == 0); 28 } 29 30 int 31 jsmntok_nextchild(jsmntok_t *tok, int tokcount, int parent, int me) 32 { 33 for (int i = me + 1; i < tokcount; i++) { 34 if ((tok + i)->parent == parent) 35 return (i); 36 /* skip all the objet child, useful if this is an array 37 * or an object 38 */ 39 i += (tok + i)->size; 40 } 41 return (-1); 42 }