]> granicus.if.org Git - esp-idf/commitdiff
spiffs: follow symlinks in host test
authorRenz Christian Bagaporo <renz@espressif.com>
Tue, 8 Oct 2019 09:55:12 +0000 (17:55 +0800)
committerRenz Christian Bagaporo <renz@espressif.com>
Tue, 8 Oct 2019 09:55:59 +0000 (17:55 +0800)
components/spiffs/test_spiffs_host/Makefile
components/spiffs/test_spiffs_host/test_spiffs.cpp

index 15b327acf14d78f5ebb4092476bf956c31400deb..3e7e9d5f5a767965fc2bdf1a08d2275a92d5e033 100644 (file)
@@ -87,7 +87,11 @@ $(TEST_PROGRAM): lib $(TEST_OBJ_FILES) $(SPI_FLASH_SIM_BUILD_DIR)/$(SPI_FLASH_SI
 
 # Use spiffs source directory as the test image
 spiffs_image: ../spiffs $(shell find ../spiffs -type d) $(shell find ../spiffs -type -f -name '*')
-       ../spiffsgen.py 2097152 ../spiffs image.bin 
+       # Creation of test symlinks unfortunately causes rerun of spiffsgen.py every make invoke
+       rm -f ../spiffs/include ../spiffs/CMakeLists.txt 
+       ln -s ../include ../spiffs/include
+       ln -s ../CMakeLists.txt ../spiffs/CMakeLists.txt
+       ../spiffsgen.py --follow-symlinks 2097152 ../spiffs image.bin 
 
 test: $(TEST_PROGRAM) spiffs_image 
        ./$(TEST_PROGRAM)
index 868ce45809a0af56646e91e14256c87bf0d0f138..ce7347b3f1f8e0fbe301f0f8c73800207ed5774d 100644 (file)
@@ -1,9 +1,13 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdint.h>
+#include <stdlib.h>
 #include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 #include <dirent.h>
 #include <limits.h>
+#include <unistd.h>
 
 #include "esp_partition.h"
 #include "spiffs.h"
@@ -96,7 +100,18 @@ static void check_spiffs_files(spiffs *fs, const char *base_path, char* cur_path
 
     while ((entry = readdir(dir)) != NULL) {
         char *name = entry->d_name;
-        if (entry->d_type == DT_DIR) {
+
+        char path[PATH_MAX] = { 0 };
+
+        // Read the file from host FS
+        strcpy(path, cur_path);
+        strcat(path, "/");
+        strcat(path, name);
+
+        struct stat sb;
+        stat(path, &sb);
+
+        if (S_ISDIR(sb.st_mode)) {
             if (!strcmp(name, ".") || !strcmp(name, ".."))
                 continue;
             cur_path[len] = '/';
@@ -104,13 +119,6 @@ static void check_spiffs_files(spiffs *fs, const char *base_path, char* cur_path
             check_spiffs_files(fs, base_path, cur_path);
             cur_path[len] = '\0';
         } else {
-            char path[PATH_MAX];
-
-            // Read the file from host FS
-            strcpy(path, cur_path);
-            strcat(path, "/");
-            strcat(path, name);
-
             FILE* f = fopen(path , "r");
             REQUIRE(f);
             fseek(f, 0, SEEK_END);
@@ -126,6 +134,7 @@ static void check_spiffs_files(spiffs *fs, const char *base_path, char* cur_path
             // Read the file from SPIFFS
             char *spiffs_path = path + strlen(base_path);
             spiffs_res = SPIFFS_open(fs, spiffs_path, SPIFFS_RDONLY, 0);
+
             REQUIRE(spiffs_res > SPIFFS_OK);
 
             spiffs_file fd = spiffs_res;