From c55d06ed57719e0a6493bcb378c67b9973e03f68 Mon Sep 17 00:00:00 2001 From: Deomid Ryabkov <rojer@cesanta.com> Date: Fri, 23 Dec 2016 14:24:27 +0200 Subject: [PATCH] Add directory listing support ot ESP32 PUBLISHED_FROM=336d6b28d6165ece75d25911058ffdd075a3c191 --- mongoose.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mongoose.c b/mongoose.c index d43ef8de6..e00ad9309 100644 --- a/mongoose.c +++ b/mongoose.c @@ -587,6 +587,10 @@ typedef struct DIR { } DIR; #endif +#if CS_ENABLE_SPIFFS +extern spiffs *cs_spiffs_get_fs(void); +#endif + #if defined(_WIN32) || CS_ENABLE_SPIFFS DIR *opendir(const char *dir_name); int closedir(DIR *dir); @@ -694,10 +698,14 @@ struct dirent *readdir(DIR *dir) { DIR *opendir(const char *dir_name) { DIR *dir = NULL; - extern spiffs fs; + spiffs *fs = cs_spiffs_get_fs(); - if (dir_name != NULL && (dir = (DIR *) malloc(sizeof(*dir))) != NULL && - SPIFFS_opendir(&fs, (char *) dir_name, &dir->dh) == NULL) { + if (dir_name == NULL || fs == NULL || + (dir = (DIR *) calloc(1, sizeof(*dir))) == NULL) { + return NULL; + } + + if (SPIFFS_opendir(fs, dir_name, &dir->dh) == NULL) { free(dir); dir = NULL; } @@ -720,14 +728,14 @@ struct dirent *readdir(DIR *dir) { /* SPIFFs doesn't support directory operations */ int rmdir(const char *path) { (void) path; - return ENOTDIR; + return ENOTSUP; } int mkdir(const char *path, mode_t mode) { (void) path; (void) mode; /* for spiffs supports only root dir, which comes from mongoose as '.' */ - return (strlen(path) == 1 && *path == '.') ? 0 : ENOTDIR; + return (strlen(path) == 1 && *path == '.') ? 0 : ENOTSUP; } #endif /* CS_ENABLE_SPIFFS */ -- GitLab