-VG_STATIC void *vg_file_read( void *lin_alloc, const char *path, u32 *size )
-{
- FILE *f = fopen( path, "rb" );
- if( f ){
- void *buffer = vg_linear_alloc( lin_alloc, 0 );
- u64 current = 0;
-
- /* read in chunks */
- for( u32 i=0; 1; i++ ){
- buffer = vg_linear_extend( lin_alloc, buffer, VG_FILE_IO_CHUNK_SIZE );
-
- u64 l = fread( buffer + current, 1, VG_FILE_IO_CHUNK_SIZE, f );
- current += l;
-
- if( l != VG_FILE_IO_CHUNK_SIZE ){
- if( feof( f ) ){
- break;
- }
- else{
- if( ferror( f ) ){
- fclose(f);
- vg_fatal_error( "read error" );
- }
- else{
- fclose(f);
- vg_fatal_error( "unknown error codition" );
- }
- }
- }
- }
-
- buffer = vg_linear_resize( lin_alloc, buffer, vg_align8(current) );
- fclose( f );
-
- *size = (u32)current;
-
- return buffer;
- }
- else{
- vg_error( "vg_disk_open_read: %s\n", strerror(errno) );
- return NULL;
- }
-}