#include #include #include #include #include size_t get_file_size(const char* filename) { size_t size = 0; WITH_FILE(filename, size = get_file_size_f(file)); return size; } size_t get_file_size_f(FILE* file) { assert(file); const long int starting_pos = ftell(file); if (starting_pos == -1) { return 0; } if (fseek(file, 0, SEEK_END) != 0) { return 0; } const size_t file_size = ftell(file); if (file_size == (size_t)-1) { return 0; } if (fseek(file, starting_pos, SEEK_SET) != 0) { return 0; } return file_size; } void* read_file(const char* filepath) { assert(filepath); void* data = nullptr; bool success = false; WITH_FILE(filepath, { const size_t file_size = get_file_size_f(file); if (file_size > 0) { data = calloc(1, file_size); if (data != nullptr) { if (fread(data, 1, file_size, file) == file_size) { success = true; } } } }); if (!success) { free(data); data = nullptr; } return data; } bool read_file_f(FILE* file, void* buffer) { assert(file); assert(buffer); bool success = false; const size_t file_size = get_file_size_f(file); if (file_size > 0) { if (fread(buffer, 1, file_size, file) == file_size) { success = true; } } return success; }