diff options
Diffstat (limited to '')
-rw-r--r-- | lib/json.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/lib/json.c b/lib/json.c new file mode 100644 index 0000000..d85a212 --- /dev/null +++ b/lib/json.c @@ -0,0 +1,123 @@ +/* json-c wrapper + * Copyright (C) 2015 Cumulus Networks, Inc. + * + * This file is part of GNU Zebra. + * + * GNU Zebra is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * GNU Zebra is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <zebra.h> + +#include "command.h" +#include "lib/json.h" + +/* + * This function assumes that the json keyword + * is the *last* keyword on the line no matter + * what. + */ +bool use_json(const int argc, struct cmd_token *argv[]) +{ + if (argc == 0) + return false; + + if (argv[argc - 1]->arg && strmatch(argv[argc - 1]->text, "json")) + return true; + + return false; +} + +struct json_object *json_object_new_stringv(const char *fmt, va_list args) +{ + struct json_object *ret; + char *text, buf[256]; + + text = vasnprintfrr(MTYPE_TMP, buf, sizeof(buf), fmt, args); + ret = json_object_new_string(text); + + if (text != buf) + XFREE(MTYPE_TMP, text); + return ret; +} + +void json_array_string_add(json_object *json, const char *str) +{ + json_object_array_add(json, json_object_new_string(str)); +} + +void json_array_string_addv(json_object *json, const char *fmt, va_list args) +{ + json_object_array_add(json, json_object_new_stringv(fmt, args)); +} + +void json_object_string_add(struct json_object *obj, const char *key, + const char *s) +{ + json_object_object_add(obj, key, json_object_new_string(s)); +} + +void json_object_string_addv(struct json_object *obj, const char *key, + const char *fmt, va_list args) +{ + json_object_object_add(obj, key, json_object_new_stringv(fmt, args)); +} + +void json_object_object_addv(struct json_object *parent, + struct json_object *child, const char *keyfmt, + va_list args) +{ + char *text, buf[256]; + + text = vasnprintfrr(MTYPE_TMP, buf, sizeof(buf), keyfmt, args); + json_object_object_add(parent, text, child); + + if (text != buf) + XFREE(MTYPE_TMP, text); +} + +void json_object_int_add(struct json_object *obj, const char *key, int64_t i) +{ + json_object_object_add(obj, key, json_object_new_int64(i)); +} + +void json_object_double_add(struct json_object *obj, const char *key, double i) +{ + json_object_object_add(obj, key, json_object_new_double(i)); +} + +void json_object_boolean_false_add(struct json_object *obj, const char *key) +{ + json_object_object_add(obj, key, json_object_new_boolean(0)); +} + +void json_object_boolean_true_add(struct json_object *obj, const char *key) +{ + json_object_object_add(obj, key, json_object_new_boolean(1)); +} + +void json_object_boolean_add(struct json_object *obj, const char *key, bool val) +{ + json_object_object_add(obj, key, json_object_new_boolean(val)); +} + +struct json_object *json_object_lock(struct json_object *obj) +{ + return json_object_get(obj); +} + +void json_object_free(struct json_object *obj) +{ + json_object_put(obj); +} |