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