Fix off-by-one

This commit is contained in:
Vas Crabb 2015-06-15 12:38:20 +10:00
parent 215e9a8be9
commit 277bd7e759

View File

@ -374,11 +374,6 @@ errout:
int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shader_file, int verbose ) int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shader_file, int verbose )
{ {
int err = 0, i, c;
FILE * file = NULL;
int buffer_len = 8192;
GLcharARB *buffer=NULL;
if(shader==NULL || shader_file==NULL) if(shader==NULL || shader_file==NULL)
{ {
if(shader==NULL) if(shader==NULL)
@ -388,7 +383,7 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return -1; return -1;
} }
file = fopen(shader_file, "r"); FILE *const file = fopen(shader_file, "r");
if(!file) if(!file)
{ {
osd_printf_warning("cannot open shader_file: %s\n", shader_file); osd_printf_warning("cannot open shader_file: %s\n", shader_file);
@ -397,23 +392,20 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
// get the real file size // get the real file size
fseek(file, 0, SEEK_END); fseek(file, 0, SEEK_END);
buffer_len = (int)ftell(file); int const buffer_len = (int)ftell(file);
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
buffer = (GLcharARB *) malloc(buffer_len); GLcharARB *const buffer = (GLcharARB *)malloc(buffer_len + 1);
memset(buffer, 0, buffer_len); memset(buffer, 0, buffer_len + 1);
/* Load Shader Sources */ /* Load Shader Sources */
i=0; for( int i = 0, c = 0; i<buffer_len && EOF!=(c=fgetc(file)); i++ )
while( i<buffer_len-1 && EOF!=(c=fgetc(file)) ) buffer[i]=(char)c;
buffer[i++]=(char)c;
fclose(file); fclose(file);
buffer[i]='\0';
err=gl_compile_shader_source(shader, type, buffer, verbose);
if(err) goto errout;
int const err=gl_compile_shader_source(shader, type, buffer, verbose);
free(buffer); free(buffer);
if(err) goto errout;
if(verbose) if(verbose)
osd_printf_warning("shader file: %s\n", shader_file); osd_printf_warning("shader file: %s\n", shader_file);
@ -421,9 +413,8 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return 0; return 0;
errout: errout:
free(buffer);
osd_printf_warning("failed to process shader_file: %s\n", shader_file); osd_printf_warning("failed to process shader_file: %s\n", shader_file);
return err; return err;
} }