Fix stackoverflow due to recursion in vfs_spiffs_readdir_r

This commit is contained in:
Konstantin Klitenik 2018-07-20 10:27:53 -04:00
parent be81d2c16d
commit 3486b51388

View file

@ -629,20 +629,23 @@ static int vfs_spiffs_readdir_r(void* ctx, DIR* pdir, struct dirent* entry,
esp_spiffs_t * efs = (esp_spiffs_t *)ctx; esp_spiffs_t * efs = (esp_spiffs_t *)ctx;
vfs_spiffs_dir_t * dir = (vfs_spiffs_dir_t *)pdir; vfs_spiffs_dir_t * dir = (vfs_spiffs_dir_t *)pdir;
struct spiffs_dirent out; struct spiffs_dirent out;
if (SPIFFS_readdir(&dir->d, &out) == 0) { size_t plen;
errno = spiffs_res_to_errno(SPIFFS_errno(efs->fs)); char * item_name;
SPIFFS_clearerr(efs->fs); do {
if (!errno) { if (SPIFFS_readdir(&dir->d, &out) == 0) {
*out_dirent = NULL; errno = spiffs_res_to_errno(SPIFFS_errno(efs->fs));
SPIFFS_clearerr(efs->fs);
if (!errno) {
*out_dirent = NULL;
}
return errno;
} }
return errno; item_name = (char *)out.name;
} plen = strlen(dir->path);
const char * item_name = (const char *)out.name;
size_t plen = strlen(dir->path); } while ((plen > 1) && (strncasecmp(dir->path, (const char*)out.name, plen) || out.name[plen] != '/' || !out.name[plen + 1]));
if (plen > 1) { if (plen > 1) {
if (strncasecmp(dir->path, (const char *)out.name, plen) || out.name[plen] != '/' || !out.name[plen+1]) {
return vfs_spiffs_readdir_r(ctx, pdir, entry, out_dirent);
}
item_name += plen + 1; item_name += plen + 1;
} else if (item_name[0] == '/') { } else if (item_name[0] == '/') {
item_name++; item_name++;