#include "file_reader.h" #define BUFFER_SIZE 16384 File* file_open(const char* filename) { File* retval = malloc(sizeof(File)); retval->name = filename; FILE* file = fopen(retval->name, "rb"); if(file) { fseek(file, 0, SEEK_END); // go to the end of the file 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; // file is completely stored in the buffer } else { perror(filename); return NULL; } } void file_close(File* file) { if(file) { free(file->data); free(file); } } int main() { File* file = file_open("strict.dtd"); puts(file->data); file_close(file); return 0; }