[igt-dev] [PATCH i-g-t 02/11] runner/resultgen: Extract finding begin/end lines for a subtest to a helper

Arkadiusz Hiler arkadiusz.hiler at intel.com
Tue Dec 3 13:33:41 UTC 2019


On Mon, Dec 02, 2019 at 03:01:00PM +0200, Petri Latvala wrote:
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> ---
>  runner/resultgen.c | 99 ++++++++++++++++++++++++----------------------
>  1 file changed, 51 insertions(+), 48 deletions(-)
> 
> diff --git a/runner/resultgen.c b/runner/resultgen.c
> index 31bc0bb1..be058327 100644
> --- a/runner/resultgen.c
> +++ b/runner/resultgen.c
> @@ -376,6 +376,54 @@ static void add_igt_version(struct json_object *testobj,
>  
>  }
>  
> +static int find_subtest_idx_limited(struct matches matches,
> +				    const char *bufend,
> +				    const char *linekey,
> +				    const char *pattern,
> +				    const char *subtest_name,
> +				    int first,
> +				    int last)
> +{
> +	char *full_line;
> +	int line_len;
> +	int k;
> +
> +	/*
> +	 * The pattern is a string literal in all call-sites, and we
> +	 * don't want to disable this warning globally
> +	 */
> +#pragma GCC diagnostic push
> +#pragma GCC diagnostic ignored "-Wformat-nonliteral"
> +	line_len = asprintf(&full_line, pattern, linekey, subtest_name);
> +#pragma GCC diagnostic pop

I guess that you didn't go for:

__attribute__((format(printf, 5, 6)))
static int find_subtest_idx_limited(struct matches matches,
				    int first,
				    int last,
				    const char *bufend,
				    const char *pattern,
				    ...)

because linekey is needed for comparison few lines below this and
extracting it with va_start()/va_arg()/va_end() is equally ugly.

How about using an enum for selecting the desired one from a set of
locally defined patterns instead of passing it as char* with all this
pragma wizardry.

-- 
Cheers,
Arek


More information about the igt-dev mailing list