/****************************************************************************** * MiniFFS : Mini Flat File System * file.c: This is the file based implementation of the MiniFFS * * Copyright (c) 2008-2022 986-Studio. All rights reserved. * ******************************************************************************/ #ifdef _WIN32 #include #include #else #include #include #include #include #endif #define __miniffs_internal #include /* Exported API */ miniffs_t *miniffs_openfs(char *host_file) { return NULL; } /* Some internal functions */ void *miniffs_getfileaddr(miniffs_t *fs, fileentry_t *fent) { } size_t host_map_file(char *filename, char **dest) { char *ret_ptr; size_t fileSize; #ifdef _WIN32 /* As windows do not provide an easy to use mmap equivalent, let's use the fallback * of opening the file, allocating memory and read the file in the said memory */ FILE *fp; fp = fopen(filename, "rb"); fseek(fp, 0, SEEK_END); fileSize = ftell(fp); fseek(fp, 0, SEEK_SET); ret_ptr = (char *)calloc(1, fileSize); fread(ret_ptr, 1, fileSize, fp); fclose(fp); #else int fd; struct stat FileStat; fd = open(filename, O_RDWR); fstat(fd, &FileStat); ret_ptr = (char *)mmap(NULL, FileStat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); close(fd); fileSize = FileStat.st_size if (ret_ptr == MAP_FAILED) { ret_ptr = NULL; } #endif *dest = ret_ptr; return fileSize; } void host_unmap_file(char **dest, size_t length) { #ifdef _WIN32 /* As for windows we don't mmap, let's just free! */ free(*dest); #else munmap(*dest, length); #endif *dest = NULL; }