summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/opengl/gl_shader_tool.c
diff options
context:
space:
mode:
author ImJezze <jezze@gmx.net>2015-07-20 08:11:41 +0200
committer ImJezze <jezze@gmx.net>2015-07-20 08:11:41 +0200
commit4bcb0c13f50ddb1cd3fd0341b4bb31d9c3c7fc7a (patch)
tree55eccacfca0e69435d0d4e6615205310ca11f271 /src/osd/modules/opengl/gl_shader_tool.c
parentd132946c6f45aa8d271c6180e86f72dd08243048 (diff)
parent229785f695b26c702c8490792611f59d0366a933 (diff)
Merge pull request #5 from mamedev/master
Sync to base master
Diffstat (limited to 'src/osd/modules/opengl/gl_shader_tool.c')
-rw-r--r--src/osd/modules/opengl/gl_shader_tool.c32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/osd/modules/opengl/gl_shader_tool.c b/src/osd/modules/opengl/gl_shader_tool.c
index abf1420f77a..203869e308e 100644
--- a/src/osd/modules/opengl/gl_shader_tool.c
+++ b/src/osd/modules/opengl/gl_shader_tool.c
@@ -374,11 +374,6 @@ errout:
int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shader_file, int verbose )
{
- int err = 0, i, c;
- FILE * file = NULL;
- const int buffer_len=8192;
- GLcharARB *buffer=NULL;
-
if(shader==NULL || shader_file==NULL)
{
if(shader==NULL)
@@ -388,27 +383,29 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return -1;
}
- file = fopen(shader_file, "r");
+ FILE *const file = fopen(shader_file, "r");
if(!file)
{
osd_printf_warning("cannot open shader_file: %s\n", shader_file);
return -1;
}
- buffer = (GLcharARB *) malloc(buffer_len);
- memset(buffer, 0, buffer_len);
+ // get the real file size
+ fseek(file, 0, SEEK_END);
+ int const buffer_len = (int)ftell(file);
+ fseek(file, 0, SEEK_SET);
- /* Load Shader Sources */
- i=0;
- while( i<buffer_len-1 && EOF!=(c=fgetc(file)) )
- buffer[i++]=(char)c;
- fclose(file);
- buffer[i]='\0';
+ GLcharARB *const buffer = (GLcharARB *)malloc(buffer_len + 1);
+ memset(buffer, 0, buffer_len + 1);
- err=gl_compile_shader_source(shader, type, buffer, verbose);
- if(err) goto errout;
+ /* Load Shader Sources */
+ for( int i = 0, c = 0; i<buffer_len && EOF!=(c=fgetc(file)); i++ )
+ buffer[i]=(char)c;
+ fclose(file);
+ int const err=gl_compile_shader_source(shader, type, buffer, verbose);
free(buffer);
+ if(err) goto errout;
if(verbose)
osd_printf_warning("shader file: %s\n", shader_file);
@@ -416,9 +413,8 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return 0;
errout:
- free(buffer);
osd_printf_warning("failed to process shader_file: %s\n", shader_file);
- return err;
+ return err;
}