diff options
author | José Bollo <jose.bollo@iot.bzh> | 2016-02-11 16:14:16 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2016-02-11 16:14:16 +0100 |
commit | 6b3c3b1916b0af0494041c12a3c86819e441105e (patch) | |
tree | 4eac9853f62456d69211321ef7cb8c3819c20cdd | |
parent | bf650bc39188c86cec8a11097f2c341e3f1b54b1 (diff) |
utils-json: refactoring
Change-Id: Ie8b49279e727afdbce7b9ea74c767d560c93af32
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r-- | src/afm-run.c | 16 | ||||
-rw-r--r-- | src/afm-system-daemon.c | 10 | ||||
-rw-r--r-- | src/utils-json.c | 74 | ||||
-rw-r--r-- | src/utils-json.h | 28 |
4 files changed, 79 insertions, 49 deletions
diff --git a/src/afm-run.c b/src/afm-run.c index b9e1e7c..4e002e0 100644 --- a/src/afm-run.c +++ b/src/afm-run.c @@ -244,14 +244,14 @@ static int fill_launch_desc(struct json_object *appli, struct afm_launch_desc *d json_object *pub; /* main items */ - if(!j_object(appli, "public", &pub) - || !j_string(appli, "path", &desc->path) - || !j_string(appli, "id", &desc->tag) - || !j_string(appli, "content", &desc->content) - || !j_string(appli, "type", &desc->type) - || !j_string(pub, "name", &desc->name) - || !j_integer(pub, "width", &desc->width) - || !j_integer(pub, "height", &desc->height)) { + if(!j_read_object_at(appli, "public", &pub) + || !j_read_string_at(appli, "path", &desc->path) + || !j_read_string_at(appli, "id", &desc->tag) + || !j_read_string_at(appli, "content", &desc->content) + || !j_read_string_at(appli, "type", &desc->type) + || !j_read_string_at(pub, "name", &desc->name) + || !j_read_integer_at(pub, "width", &desc->width) + || !j_read_integer_at(pub, "height", &desc->height)) { errno = EINVAL; return -1; } diff --git a/src/afm-system-daemon.c b/src/afm-system-daemon.c index 65e7e33..6a242ea 100644 --- a/src/afm-system-daemon.c +++ b/src/afm-system-daemon.c @@ -82,10 +82,10 @@ static void on_install(struct jreq *jreq, struct json_object *req) force = 0; break; case json_type_object: - wgtfile = j_get_string(req, "wgt", NULL); + wgtfile = j_string_at(req, "wgt", NULL); if (wgtfile != NULL) { - root = j_get_string(req, "root", rootdir); - force = j_get_boolean(req, "force", 0); + root = j_string_at(req, "root", rootdir); + force = j_boolean_at(req, "force", 0); break; } default: @@ -127,9 +127,9 @@ static void on_uninstall(struct jreq *jreq, struct json_object *req) root = rootdir; break; case json_type_object: - idaver = j_get_string(req, "id", NULL); + idaver = j_string_at(req, "id", NULL); if (idaver != NULL) { - root = j_get_string(req, "root", rootdir); + root = j_string_at(req, "root", rootdir); break; } default: diff --git a/src/utils-json.c b/src/utils-json.c index 82908f4..3af2a4c 100644 --- a/src/utils-json.c +++ b/src/utils-json.c @@ -22,57 +22,75 @@ #include "utils-json.h" -int j_object(struct json_object *obj, const char *key, struct json_object **value) +int j_read_string(struct json_object *obj, const char **value) +{ + return j_is_string(obj) && (*value = json_object_get_string(obj)) != NULL; +} + +int j_read_boolean(struct json_object *obj, int *value) +{ + return j_is_boolean(obj) && ((*value = (int)json_object_get_boolean(obj)), 1); +} + +int j_read_integer(struct json_object *obj, int *value) +{ + return j_is_integer(obj) && ((*value = (int)json_object_get_int(obj)), 1); +} + +const char *j_string(struct json_object *obj, const char *defval) +{ + return j_is_string(obj) ? json_object_get_string(obj) : defval; +} + +int j_boolean(struct json_object *obj, int defval) +{ + return j_is_boolean(obj) ? json_object_get_boolean(obj) : defval; +} + +int j_integer(struct json_object *obj, int defval) +{ + return j_is_integer(obj) ? json_object_get_int(obj) : defval; +} + +int j_read_object_at(struct json_object *obj, const char *key, struct json_object **value) { return json_object_object_get_ex(obj, key, value); } -int j_string(struct json_object *obj, const char *key, const char **value) +int j_read_string_at(struct json_object *obj, const char *key, const char **value) { json_object *data; - return j_object(obj, key, &data) - && json_object_get_type(data) == json_type_string - && (*value = json_object_get_string(data)) != NULL; + return j_read_object_at(obj, key, &data) && j_read_string(data, value); } -int j_boolean(struct json_object *obj, const char *key, int *value) +int j_read_boolean_at(struct json_object *obj, const char *key, int *value) { json_object *data; - return json_object_object_get_ex(obj, key, &data) - && json_object_get_type(data) == json_type_boolean - && ((*value = (int)json_object_get_boolean(data)), 1); + return j_read_object_at(obj, key, &data) && j_read_boolean(data, value); } -int j_integer(struct json_object *obj, const char *key, int *value) +int j_read_integer_at(struct json_object *obj, const char *key, int *value) { json_object *data; - return json_object_object_get_ex(obj, key, &data) - && json_object_get_type(data) == json_type_int - && ((*value = (int)json_object_get_int(data)), 1); + return j_read_object_at(obj, key, &data) && j_read_integer(data, value); } -const char *j_get_string(struct json_object *obj, const char *key, const char *defval) +const char *j_string_at(struct json_object *obj, const char *key, const char *defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_string - ? json_object_get_string(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_string(data, defval) : defval; } -int j_get_boolean(struct json_object *obj, const char *key, int defval) +int j_boolean_at(struct json_object *obj, const char *key, int defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_boolean - ? json_object_get_boolean(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_boolean(data, defval) : defval; } -int j_get_integer(struct json_object *obj, const char *key, int defval) +int j_integer_at(struct json_object *obj, const char *key, int defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_int - ? json_object_get_int(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_integer(data, defval) : defval; } int j_add(struct json_object *obj, const char *key, struct json_object *val) diff --git a/src/utils-json.h b/src/utils-json.h index 9778347..5b8ebec 100644 --- a/src/utils-json.h +++ b/src/utils-json.h @@ -16,14 +16,26 @@ limitations under the License. */ -int j_object(struct json_object *obj, const char *key, struct json_object **value); -int j_string(struct json_object *obj, const char *key, const char **value); -int j_boolean(struct json_object *obj, const char *key, int *value); -int j_integer(struct json_object *obj, const char *key, int *value); - -extern const char *j_get_string(struct json_object *obj, const char *key, const char *defval); -extern int j_get_boolean(struct json_object *obj, const char *key, int defval); -extern int j_get_integer(struct json_object *obj, const char *key, int defval); +#define j_is_string(o) (json_object_get_type(o) == json_type_string) +#define j_is_boolean(o) (json_object_get_type(o) == json_type_boolean) +#define j_is_integer(o) (json_object_get_type(o) == json_type_int) + +extern int j_read_string(struct json_object *obj, const char **value); +extern int j_read_boolean(struct json_object *obj, int *value); +extern int j_read_integer(struct json_object *obj, int *value); + +extern const char *j_string(struct json_object *obj, const char *defval); +extern int j_boolean(struct json_object *obj, int defval); +extern int j_integer(struct json_object *obj, int defval); + +extern int j_read_object_at(struct json_object *obj, const char *key, struct json_object **value); +extern int j_read_string_at(struct json_object *obj, const char *key, const char **value); +extern int j_read_boolean_at(struct json_object *obj, const char *key, int *value); +extern int j_read_integer_at(struct json_object *obj, const char *key, int *value); + +extern const char *j_string_at(struct json_object *obj, const char *key, const char *defval); +extern int j_boolean_at(struct json_object *obj, const char *key, int defval); +extern int j_integer_at(struct json_object *obj, const char *key, int defval); extern int j_add(struct json_object *obj, const char *key, struct json_object *val); extern int j_add_string(struct json_object *obj, const char *key, const char *val); |