ACK: [PATCH] Use json_object_object_get_ex if is available
IvanHu
ivan.hu at canonical.com
Tue May 6 02:36:04 UTC 2014
On 05/01/2014 07:40 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> fwts fails to build on utopic because json_object_object_get has
> been deprecated. Check if json_object_object_get_ex is available
> at config time and if so, use this. This fix ensures fwts is
> backwardly compatible so we can still build it on older releases.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> configure.ac | 1 +
> src/acpi/syntaxcheck/syntaxcheck.c | 36 +++++++++++++++++++++++++++++++-----
> src/lib/include/fwts.h | 2 ++
> src/lib/src/fwts_klog.c | 31 ++++++++++++++++++++++++-------
> src/utilities/kernelscan.c | 33 ++++++++++++++++++++++++++++++---
> 5 files changed, 88 insertions(+), 15 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index ec29f84..fc1ea03 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -10,6 +10,7 @@
> AC_C_INLINE
> AM_PROG_CC_C_O
> AC_SEARCH_LIBS([json_object_from_file], [json json-c], [], [ AC_MSG_ERROR([no available json library]) ])
> + AC_SEARCH_LIBS([json_object_object_get_ex], [json json-c], [ AC_DEFINE([JSON_HAS_GET_EX], [1], [Define if we have json_object_object_get_ex])], [])
> AC_CHECK_FUNCS([localtime_r])
> AC_CHECK_FUNCS([dup2])
> AC_CHECK_FUNCS([getcwd])
> diff --git a/src/acpi/syntaxcheck/syntaxcheck.c b/src/acpi/syntaxcheck/syntaxcheck.c
> index 1e91ffc..a6dd583 100644
> --- a/src/acpi/syntaxcheck/syntaxcheck.c
> +++ b/src/acpi/syntaxcheck/syntaxcheck.c
> @@ -342,12 +342,18 @@ static int syntaxcheck_load_advice(fwts_framework *fw)
> fwts_log_error(fw, "Cannot load objects table from %s.", json_data_path);
> return FWTS_ERROR;
> }
> -
> - syntaxcheck_table = json_object_object_get(syntaxcheck_objs, "erroradvice");
> - if (FWTS_JSON_ERROR(syntaxcheck_table)) {
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(syntaxcheck_objs, "erroradvice", &syntaxcheck_table)) {
> fwts_log_error(fw, "Cannot fetch syntaxcheck table from %s.", json_data_path);
> goto fail_put;
> }
> +#else
> + syntaxcheck_table = json_object_object_get(syntaxcheck_objs, "erroradvice");
> + if (FWTS_JSON_ERROR(syntaxcheck_table)) {
> + fwts_log_error(fw, "Cannot fetch syntaxcheck table from %s.", json_data_path);
> + goto fail_put;
> + }
> +#endif
>
> n = json_object_array_length(syntaxcheck_table);
>
> @@ -355,6 +361,9 @@ static int syntaxcheck_load_advice(fwts_framework *fw)
> for (i = 0; i < n; i++) {
> const char *advice, *id_str;
> json_object *obj;
> +#if JSON_HAS_GET_EX
> + json_object *obj_str;
> +#endif
> int j;
>
> obj = json_object_array_get_idx(syntaxcheck_table, i);
> @@ -362,14 +371,31 @@ static int syntaxcheck_load_advice(fwts_framework *fw)
> fwts_log_error(fw, "Cannot fetch %d item from syntaxcheck table.", i);
> break;
> }
> +
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(obj, "advice", &obj_str)) {
> + fwts_log_error(fw, "Cannot fetch advice object from item %d.", i);
> + break;
> + }
> + advice = json_object_get_string(obj_str);
> +#else
> advice = json_object_get_string(json_object_object_get(obj, "advice"));
> +#endif
> if (FWTS_JSON_ERROR(advice)) {
> - fwts_log_error(fw, "Cannot fetch advice from item %d.", i);
> + fwts_log_error(fw, "Cannot fetch advice string from item %d.", i);
> + break;
> + }
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(obj, "id", &obj_str)) {
> + fwts_log_error(fw, "Cannot fetch ID object from item %d.", i);
> break;
> }
> + id_str = json_object_get_string(obj_str);
> +#else
> id_str = json_object_get_string(json_object_object_get(obj, "id"));
> +#endif
> if (FWTS_JSON_ERROR(id_str)) {
> - fwts_log_error(fw, "Cannot fetch ID from item %d.", i);
> + fwts_log_error(fw, "Cannot fetch ID string from item %d.", i);
> break;
> }
>
> diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
> index b8b0602..84075f7 100644
> --- a/src/lib/include/fwts.h
> +++ b/src/lib/include/fwts.h
> @@ -20,6 +20,8 @@
> #ifndef __FWTS_H__
> #define __FWTS_H__
>
> +#include "config.h"
> +
> #if defined(__x86_64__) || defined(__x86_64) || defined(__i386__) || defined(__i386)
> #define FWTS_ARCH_INTEL 1
> #endif
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index cfe7dcf..ae6e396 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -336,15 +336,25 @@ static const char *fwts_json_str(
> bool log_error)
> {
> const char *str;
> -
> +#if JSON_HAS_GET_EX
> + json_object *str_obj;
> +
> + if (!json_object_object_get_ex(obj, key, &str_obj))
> + goto nullobj;
> + str = json_object_get_string(str_obj);
> + if (FWTS_JSON_ERROR(str))
> + goto nullobj;
> +#else
> str = json_object_get_string(json_object_object_get(obj, key));
> - if (FWTS_JSON_ERROR(str)) {
> - if (log_error)
> - fwts_log_error(fw, "Cannot fetch %s val from item %d, table %s.",
> - key, index, table);
> - return NULL;
> - }
> + if (FWTS_JSON_ERROR(str))
> + goto nullobj;
> +#endif
> return str;
> +nullobj:
> + if (log_error)
> + fwts_log_error(fw, "Cannot fetch %s val from item %d, table %s.",
> + key, index, table);
> + return NULL;
> }
>
> static int fwts_klog_check(fwts_framework *fw,
> @@ -380,11 +390,18 @@ static int fwts_klog_check(fwts_framework *fw,
> return FWTS_ERROR;
> }
>
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(klog_objs, table, &klog_table)) {
> + fwts_log_error(fw, "Cannot fetch klog table object '%s' from %s.", table, json_data_path);
> + goto fail_put;
> + }
> +#else
> klog_table = json_object_object_get(klog_objs, table);
> if (FWTS_JSON_ERROR(klog_table)) {
> fwts_log_error(fw, "Cannot fetch klog table object '%s' from %s.", table, json_data_path);
> goto fail_put;
> }
> +#endif
>
> n = json_object_array_length(klog_table);
>
> diff --git a/src/utilities/kernelscan.c b/src/utilities/kernelscan.c
> index 5409ca6..1b793bb 100644
> --- a/src/utilities/kernelscan.c
> +++ b/src/utilities/kernelscan.c
> @@ -26,6 +26,7 @@
>
> #include <pcre.h>
> #include <json/json.h>
> +#include "config.h"
>
> #define PARSER_OK 0
> #define PARSER_COMMENT_FOUND 1
> @@ -248,11 +249,18 @@ static klog_pattern *klog_load(const char *table)
> exit(EXIT_FAILURE);
> }
>
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(klog_objs, table, &klog_table)) {
> + fprintf(stderr, "Cannot fetch klog table object from %s.\n", table);
> + exit(EXIT_FAILURE);
> + }
> +#else
> klog_table = json_object_object_get(klog_objs, table);
> if (JSON_ERROR(klog_table)) {
> fprintf(stderr, "Cannot fetch klog table object from %s.\n", table);
> exit(EXIT_FAILURE);
> }
> +#endif
>
> n = json_object_array_length(klog_table);
>
> @@ -265,9 +273,12 @@ static klog_pattern *klog_load(const char *table)
> /* Now fetch json objects and compile regex */
> for (i = 0; i < n; i++) {
> const char *error;
> - char *str;
> + const char *str;
> int erroffset;
> json_object *obj;
> +#if JSON_HAS_GET_EX
> + json_object *obj_str;
> +#endif
>
> obj = json_object_array_get_idx(klog_table, i);
> if (JSON_ERROR(obj)) {
> @@ -275,16 +286,32 @@ static klog_pattern *klog_load(const char *table)
> exit(EXIT_FAILURE);
> }
>
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(obj, "compare_mode", &obj_str)) {
> + fprintf(stderr, "Cannot fetch compare_mode object, item %d from table %s.\n", i, table);
> + exit(EXIT_FAILURE);
> + }
> + str = json_object_get_string(obj_str);
> +#else
> str = (char*)json_object_get_string(json_object_object_get(obj, "compare_mode"));
> +#endif
> if (JSON_ERROR(str)) {
> - fprintf(stderr, "Cannot fetch compare_mode object, item %d from table %s.\n", i, table);
> + fprintf(stderr, "Cannot fetch compare_mode string, item %d from table %s.\n", i, table);
> exit(EXIT_FAILURE);
> }
> patterns[i].cm = klog_compare_mode_str_to_val(str);
>
> +#if JSON_HAS_GET_EX
> + if (!json_object_object_get_ex(obj, "pattern", &obj_str)) {
> + fprintf(stderr, "Cannot fetch pattern object, item %d from table %s.\n", i, table);
> + exit(EXIT_FAILURE);
> + }
> + str = json_object_get_string(obj_str);
> +#else
> str = (char*)json_object_get_string(json_object_object_get(obj, "pattern"));
> +#endif
> if (JSON_ERROR(str)) {
> - fprintf(stderr, "Cannot fetch pattern object, item %d from table %s.\n", i, table);
> + fprintf(stderr, "Cannot fetch pattern string, item %d from table %s.\n", i, table);
> exit(EXIT_FAILURE);
> }
> patterns[i].pattern = strdup(str);
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list