[Piglit] [PATCH] util: use piglit_load_text_file() in piglit_compile_shader()

Brian Paul brianp at vmware.com
Mon Apr 28 14:43:58 PDT 2014


Yeah, that's a good point.  I'll get rid of that too.

-Brian

On 04/28/2014 03:37 PM, Jamey Sharp wrote:
> After this patch, you don't need the stat call either, right? I think
> the function reduces to getenv, snprintf, piglit_load_text_file,
> piglit_compile_shader_text, and free. Which seems like a good idea
> even if it wasn't fixing any bugs.
>
> Jamey
>
> On Mon, Apr 28, 2014 at 2:13 PM, Brian Paul <brianp at vmware.com> wrote:
>> The old code had a problem on MinGW.  If the shader/text file had
>> DOS-style \r\n line endings, fread() would convert them to Unix-style
>> \n line endings.  Since the actual number of chars read by fread()
>> was less than the stat()'d size, we put the terminating '\0' in the
>> wrong place, possibly after some garbage characters in the buffer.
>>
>> This sometimes caused the GLSL compiler to generate an error when it
>> found those garbage chars.
>>
>> A Heisenbug:  I was seeing failures w/out gdb but success w/ gdb. Ugh!
>> ---
>>   tests/util/piglit-shader.c |   16 +++-------------
>>   1 file changed, 3 insertions(+), 13 deletions(-)
>>
>> diff --git a/tests/util/piglit-shader.c b/tests/util/piglit-shader.c
>> index b326abd..0aa4d02 100644
>> --- a/tests/util/piglit-shader.c
>> +++ b/tests/util/piglit-shader.c
>> @@ -69,7 +69,6 @@ piglit_compile_shader(GLenum target, const char *filename)
>>          struct stat st;
>>          int err;
>>          GLchar *prog_string;
>> -       FILE *f;
>>          const char *source_dir;
>>          char filename_with_path[FILENAME_MAX];
>>
>> @@ -89,21 +88,12 @@ piglit_compile_shader(GLenum target, const char *filename)
>>                  exit(1);
>>          }
>>
>> -       prog_string = malloc(st.st_size + 1);
>> -       if (prog_string == NULL) {
>> -               fprintf(stderr, "malloc\n");
>> +       prog_string = piglit_load_text_file(filename_with_path, NULL);
>> +       if (!prog_string) {
>> +               fprintf(stderr, "Unable to read %s\n", filename_with_path);
>>                  exit(1);
>>          }
>>
>> -       f = fopen(filename_with_path, "r");
>> -       if (f == NULL) {
>> -               fprintf(stderr, "Couldn't open program: %s\n", strerror(errno));
>> -               exit(1);
>> -       }
>> -       fread(prog_string, 1, st.st_size, f);
>> -       prog_string[st.st_size] = '\0';
>> -       fclose(f);
>> -
>>          prog = piglit_compile_shader_text(target, prog_string);
>>
>>          free(prog_string);
>> --
>> 1.7.10.4
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> https://urldefense.proofpoint.com/v1/url?u=http://lists.freedesktop.org/mailman/listinfo/piglit&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=lGQMzzTgII0I7jefp2FHq7WtZ%2BTLs8wadB%2BiIj9xpBY%3D%0A&m=oLWRJcnowivMFiIF8%2FG4JcEfX8HtT6%2F77%2Fc%2BogvQnEo%3D%0A&s=1a9d7ad89c05f0c93ab43d7febd772319ea2e2aee0fbeb83c605a7422f3ddcb1



More information about the Piglit mailing list