From 50d5d0761993474bf86ae4832a139c50586fdccb Mon Sep 17 00:00:00 2001 From: Max Christian Pohle Date: Wed, 25 May 2016 17:12:39 +0200 Subject: Improved performance by a single fread Accidentally uploaded an old version of this library --- file_reader.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/file_reader.c b/file_reader.c index eea7761..c262091 100755 --- a/file_reader.c +++ b/file_reader.c @@ -6,19 +6,17 @@ File* file_open(const char* filename) { File* retval = malloc(sizeof(File)); retval->name = filename; - retval->data = malloc(0); - retval->size = 0; - FILE* file = fopen(filename, "rb"); + + FILE* file = fopen(retval->name, "rb"); + fseek(file, 0, SEEK_END); // go to the end of the file if(file) { - do - { - retval->data = realloc(retval->data, retval->size + BUFFER_SIZE); - retval->size += fread(&retval->data[retval->size], 1, BUFFER_SIZE, file); - } while(!feof(file)); - retval->data = realloc(retval->data, retval->size); + retval->size = ftell(0); // save the position (end of the file) + retval->data = malloc(retval->size + 1); + fseek(file, 0, SEEK_SET); // return to the beginning of the file + fread(retval->data, retval->size, 1, file); fclose(file); - return retval; + return retval; // file is completely stored in the buffer } else { @@ -29,8 +27,11 @@ File* file_open(const char* filename) void file_close(File* file) { - free(file->data); - free(file); + if(file) + { + free(file->data); + free(file); + } } int main() -- cgit v1.2.3