]> git.proxmox.com Git - mirror_frr.git/blame - lib/json.c
Merge pull request #11003 from anlancs/bgpd-mh-trival-remove
[mirror_frr.git] / lib / json.c
CommitLineData
f1aa5d8a
DS
1/* json-c wrapper
2 * Copyright (C) 2015 Cumulus Networks, Inc.
3 *
4 * This file is part of GNU Zebra.
5 *
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
9 * later version.
10 *
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
896014f4
DL
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
f1aa5d8a
DS
19 */
20
4b25d72d
DS
21#include <zebra.h>
22
8a2d6083 23#include "command.h"
f1aa5d8a
DS
24#include "lib/json.h"
25
db7c8528
DS
26/*
27 * This function assumes that the json keyword
28 * is the *last* keyword on the line no matter
29 * what.
30 */
9f049418 31bool use_json(const int argc, struct cmd_token *argv[])
db7c8528 32{
d62a17ae 33 if (argc == 0)
9f049418 34 return false;
db7c8528 35
d62a17ae 36 if (argv[argc - 1]->arg && strmatch(argv[argc - 1]->text, "json"))
9f049418 37 return true;
db7c8528 38
9f049418 39 return false;
db7c8528
DS
40}
41
2c4dfddb
DL
42struct json_object *json_object_new_stringv(const char *fmt, va_list args)
43{
44 struct json_object *ret;
45 char *text, buf[256];
46
47 text = vasnprintfrr(MTYPE_TMP, buf, sizeof(buf), fmt, args);
48 ret = json_object_new_string(text);
49
50 if (text != buf)
51 XFREE(MTYPE_TMP, text);
52 return ret;
53}
54
a2339ed9
AK
55void json_array_string_add(json_object *json, const char *str)
56{
57 json_object_array_add(json, json_object_new_string(str));
58}
59
2c4dfddb
DL
60void json_array_string_addv(json_object *json, const char *fmt, va_list args)
61{
62 json_object_array_add(json, json_object_new_stringv(fmt, args));
63}
64
d62a17ae 65void json_object_string_add(struct json_object *obj, const char *key,
66 const char *s)
f1aa5d8a 67{
d62a17ae 68 json_object_object_add(obj, key, json_object_new_string(s));
f1aa5d8a
DS
69}
70
2c4dfddb
DL
71void json_object_string_addv(struct json_object *obj, const char *key,
72 const char *fmt, va_list args)
73{
74 json_object_object_add(obj, key, json_object_new_stringv(fmt, args));
75}
76
424ec384
DL
77void json_object_object_addv(struct json_object *parent,
78 struct json_object *child, const char *keyfmt,
79 va_list args)
80{
81 char *text, buf[256];
82
83 text = vasnprintfrr(MTYPE_TMP, buf, sizeof(buf), keyfmt, args);
84 json_object_object_add(parent, text, child);
85
86 if (text != buf)
87 XFREE(MTYPE_TMP, text);
88}
89
d62a17ae 90void json_object_int_add(struct json_object *obj, const char *key, int64_t i)
c6a7d59c 91{
d62a17ae 92 json_object_object_add(obj, key, json_object_new_int64(i));
c6a7d59c
DW
93}
94
799cc002
PG
95void json_object_double_add(struct json_object *obj, const char *key, double i)
96{
97 json_object_object_add(obj, key, json_object_new_double(i));
98}
99
d62a17ae 100void json_object_boolean_false_add(struct json_object *obj, const char *key)
f1aa5d8a 101{
d62a17ae 102 json_object_object_add(obj, key, json_object_new_boolean(0));
f1aa5d8a
DS
103}
104
d62a17ae 105void json_object_boolean_true_add(struct json_object *obj, const char *key)
f1aa5d8a 106{
d62a17ae 107 json_object_object_add(obj, key, json_object_new_boolean(1));
f1aa5d8a
DS
108}
109
e91c9247
QY
110void json_object_boolean_add(struct json_object *obj, const char *key, bool val)
111{
112 json_object_object_add(obj, key, json_object_new_boolean(val));
113}
114
d62a17ae 115struct json_object *json_object_lock(struct json_object *obj)
f1aa5d8a 116{
d62a17ae 117 return json_object_get(obj);
f1aa5d8a
DS
118}
119
d62a17ae 120void json_object_free(struct json_object *obj)
f1aa5d8a 121{
d62a17ae 122 json_object_put(obj);
f1aa5d8a 123}