[Piglit] [PATCH 2/3] piglit gl: convert gl extension checking to use an array of strings

Chad Versace chad.versace at linux.intel.com
Tue Sep 4 15:06:57 PDT 2012


On 09/01/2012 10:15 AM, Jordan Justen wrote:
> This better matches the interface of glGetStringi, which should be used
> for GL >= 3.0.
> 
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
>  tests/util/piglit-util-gl-common.c |   55 ++++++++++++++++++++++++++++++++----
>  tests/util/piglit-util.c           |   15 ++++++++++
>  tests/util/piglit-util.h           |   12 ++++++++
>  3 files changed, 77 insertions(+), 5 deletions(-)


> -bool piglit_is_extension_supported(const char *name)
> +static const char** split_string(const char *string)
>  {
> -	if (gl_extensions == NULL) {
> -		gl_extensions = (const char *) glGetString(GL_EXTENSIONS);
> +	char *split;
> +	char **strings;
> +	int offset, length, words, max_words;
> +	bool was_in_word, in_word;
> +
> +	length = strlen(string);
> +	max_words = length / 2;
> +	strings = malloc ((sizeof(char*) * (max_words + 1)) +
> +	                  (sizeof(char) * (length + 1)));
> +	split = (char*) &strings[max_words + 1];
> +	assert (strings != NULL);
> +
> +	for (words = 0, was_in_word = false, offset = 0;
> +	     offset < length;
> +	     offset++) {
> +		char c = string[offset];
> +		in_word = (c != 0) && !isspace(c);
> +		if (!in_word) {
> +			split[offset] = 0;
> +		} else {
> +			split[offset] = c;
> +			if (!was_in_word) {
> +				strings[words] = &split[offset];
> +				words++;
> +			}
> +		}
> +		was_in_word = in_word;
>  	}
>  
> -	return piglit_is_extension_in_string(gl_extensions, name);
> +	strings[words] = NULL;
> +
> +	return (const char**) strings;
> +}

The loop can be more concisely written with strtok:

    split = strdup(string);
    strings = strtok(split, " ");
    for (i = 0; strings[i] != NULL; ++i)
        strings[i + 1] = strtok(NULL, " ");

    return strings;


More information about the Piglit mailing list