Browse Source

Make the file platform to work

Manoel Trapier 1 year ago
parent
commit
db29d0a703
2 changed files with 45 additions and 16 deletions
  1. 1 0
      includes/platform/file.h
  2. 44 16
      platform/file.c

+ 1 - 0
includes/platform/file.h

@@ -28,6 +28,7 @@ typedef struct miniffs_t
 {
     miniffs_header_t *header;
 
+    void *memoryOffset;
 #ifdef BUILD_HOST_TOOLS
     uint32_t file_count;        /***< Number of valid files in the list */
     uint32_t file_list_count;   /***< Number of items in the list */

+ 44 - 16
platform/file.c

@@ -10,8 +10,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 #else
+#include <stdlib.h>
 #include <sys/mman.h>
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
 #endif
@@ -19,20 +21,7 @@
 #define __miniffs_internal
 #include <miniffs.h>
 
-/* Exported API */
-miniffs_t *miniffs_openfs(char *host_file)
-{
-    return NULL;
-}
-
-
-/* Some internal functions */
-void *miniffs_getfileaddr(miniffs_t *fs, fileentry_t *fent)
-{
-
-}
-
-
+/* Internal functions */
 size_t host_map_file(char *filename, char **dest)
 {
     char *ret_ptr;
@@ -55,7 +44,7 @@ size_t host_map_file(char *filename, char **dest)
 
     fd = open(filename, O_RDWR);
     fstat(fd, &FileStat);
-    ret_ptr = (char *)mmap(NULL, FileStat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+    ret_ptr = (char *)mmap(NULL, FileStat.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
     close(fd);
     fileSize = FileStat.st_size;
     if (ret_ptr == MAP_FAILED)
@@ -77,4 +66,43 @@ void host_unmap_file(char **dest, size_t length)
 #endif
 
     *dest = NULL;
-}
+}
+
+/* Exported API */
+miniffs_t *miniffs_openfs(char *host_file)
+{
+    miniffs_t *fs = NULL;
+
+    fs = (miniffs_t *)calloc(1, sizeof(miniffs_t));
+    if (fs == NULL)
+    {
+        miniffs_seterror(MINIFFS_ALLOCATION_ERROR);
+        goto exit;
+    }
+
+    host_map_file(host_file, (char **)&fs->memoryOffset);
+
+    fs->header = (miniffs_header_t *)fs->memoryOffset;
+
+    if (!miniffs_isvalidfs(fs))
+    {
+        miniffs_seterror(MINIFFS_INVALID_FS);
+        goto free_and_exit;
+    }
+
+    goto exit;
+
+    free_and_exit:
+    free(fs);
+    fs = NULL;
+
+    exit:
+    return fs;
+}
+
+
+/* Some internal functions */
+void *miniffs_getfileaddr(miniffs_t *fs, fileentry_t *fent)
+{
+    return fs->memoryOffset + fent->offset;
+}