[Piglit] [PATCH 2/4] util: Add utilities to handle shader_test files

Alejandro Piñeiro apinheiro at igalia.com
Thu Aug 9 11:23:53 UTC 2018



On 09/08/18 13:19, Antia Puentes wrote:
> Hi Alejandro,
>
>
> On 20/07/18 17:16, Alejandro Piñeiro wrote:
>> +
>> +bool
>> +piglit_load_source_from_shader_test(const char *filename,
>> +                    GLenum shader_type,
>> +                    bool spirv,
>> +                    char **output_source,
>> +                    unsigned *output_source_size)
>> +{
>> +    char group_name[4096];
>> +    char *source = NULL;
>> +    unsigned text_size;
>> +    char *line = NULL;
>> +    char *first_line = NULL;
>> +
>> +    group_name_for_stage(shader_type, spirv, group_name);
>> +
>> +    char *text = piglit_load_text_file(filename, &text_size);
> There is a memory leak, you forgot to free "text" before returning.

Thanks. I plan to send a new version of the pending ARB_gl_spirv series
today. I will include a new version of this patch with that leak fixed.

>
>> +    line = text;
>> +
>> +    if (line == NULL) {
>> +        fprintf(stderr, "Could not read file \"%s\"\n", filename);
>> +        return false;
>> +    }
>> +
>> +    while (line[0] != '\0') {
>> +        if (line[0] == '[' && first_line != NULL) {
>> +            break;
>> +        }
>> +
>> +        if (line[0] == '[' && first_line == NULL) {
>> +            if (parse_str(line, group_name, NULL)) {
>> +                first_line = strchrnul(line, '\n');
>> +                if (first_line[0] != '\0')
>> +                    first_line++;
>> +            }
>> +        }
>> +
>> +        line = strchrnul(line, '\n');
>> +        if (line[0] != '\0')
>> +            line++;
>> +    }
>> +
>> +    if (first_line == NULL) {
>> +        fprintf(stderr, "Could not find groupname \"%s\" on file
>> \"%s\"\n",
>> +            group_name, filename);
>> +        return false;
>> +    }
>> +
>> +    text_size = line - first_line + 1;
>> +    source = malloc(sizeof(char*) * text_size);
>> +    snprintf(source, line - first_line + 1, "%s", first_line);
>> +
>> +    if (output_source)
>> +        *output_source = source;
>> +
>> +    if (output_source_size)
>> +        *output_source_size = text_size;
>> +
>> +    return true;
>> +}
>>
> Regards.
>
>
>



More information about the Piglit mailing list