From 6a361795eeaba9fc1b643dd6c3203004ab9543be Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 7 Feb 2022 23:25:14 +0100 Subject: [PATCH 1/2] pkg/littlefs*: align readdir() with documentation `readdir()` should only output the name of the file, but littleFS adds a leading `/`. Neither FAT nor Linux will exhibit this behavior. struct dirent *entry; DIR *dir = opendir("."); while ((entry = readdir(dir))) { printf("%s\n", entry->d_name); } This results in surprising failures of code that expects filenames to match that was tested on a different FS, when suddenly there is a `/` in front of the filename. --- pkg/littlefs/fs/littlefs_fs.c | 3 +-- pkg/littlefs2/fs/littlefs2_fs.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/littlefs/fs/littlefs_fs.c b/pkg/littlefs/fs/littlefs_fs.c index 9fc4f629d2..85a249d4d4 100644 --- a/pkg/littlefs/fs/littlefs_fs.c +++ b/pkg/littlefs/fs/littlefs_fs.c @@ -493,8 +493,7 @@ static int _readdir(vfs_DIR *dirp, vfs_dirent_t *entry) int ret = lfs_dir_read(&fs->fs, dir, &info); if (ret >= 0) { entry->d_ino = info.type; - entry->d_name[0] = '/'; - strncpy(entry->d_name + 1, info.name, VFS_NAME_MAX - 1); + strncpy(entry->d_name, info.name, VFS_NAME_MAX - 1); } mutex_unlock(&fs->lock); diff --git a/pkg/littlefs2/fs/littlefs2_fs.c b/pkg/littlefs2/fs/littlefs2_fs.c index 1860f94053..5c65cd6ce3 100644 --- a/pkg/littlefs2/fs/littlefs2_fs.c +++ b/pkg/littlefs2/fs/littlefs2_fs.c @@ -499,8 +499,7 @@ static int _readdir(vfs_DIR *dirp, vfs_dirent_t *entry) int ret = lfs_dir_read(&fs->fs, dir, &info); if (ret >= 0) { entry->d_ino = info.type; - entry->d_name[0] = '/'; - strncpy(entry->d_name + 1, info.name, VFS_NAME_MAX - 1); + strncpy(entry->d_name, info.name, VFS_NAME_MAX - 1); } mutex_unlock(&fs->lock); From 79d342a576966c15baf8bb1fb02158157dc9522d Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Tue, 8 Feb 2022 10:10:17 +0100 Subject: [PATCH 2/2] tests/pkg_littlefs*: align test with documentation --- tests/pkg_littlefs/main.c | 6 +++--- tests/pkg_littlefs2/main.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/pkg_littlefs/main.c b/tests/pkg_littlefs/main.c index 6821735334..435aa51bf0 100644 --- a/tests/pkg_littlefs/main.c +++ b/tests/pkg_littlefs/main.c @@ -288,8 +288,8 @@ static void tests_littlefs_readdir(void) int nb_files = 0; do { res = vfs_readdir(&dirp, &entry); - if (res == 1 && (strcmp("/test0.txt", &(entry.d_name[0])) == 0 || - strcmp("/test1.txt", &(entry.d_name[0])) == 0)) { + if (res == 1 && (strcmp("test0.txt", &(entry.d_name[0])) == 0 || + strcmp("test1.txt", &(entry.d_name[0])) == 0)) { nb_files++; } } while (res == 1); @@ -305,7 +305,7 @@ static void tests_littlefs_readdir(void) nb_files = 0; do { res = vfs_readdir(&dirp, &entry); - if (res == 1 && strcmp("/test2.txt", &(entry.d_name[0])) == 0) { + if (res == 1 && strcmp("test2.txt", &(entry.d_name[0])) == 0) { nb_files++; } } while (res == 1); diff --git a/tests/pkg_littlefs2/main.c b/tests/pkg_littlefs2/main.c index a287a2b322..5f6e62b749 100644 --- a/tests/pkg_littlefs2/main.c +++ b/tests/pkg_littlefs2/main.c @@ -288,8 +288,8 @@ static void tests_littlefs_readdir(void) int nb_files = 0; do { res = vfs_readdir(&dirp, &entry); - if (res == 1 && (strcmp("/test0.txt", &(entry.d_name[0])) == 0 || - strcmp("/test1.txt", &(entry.d_name[0])) == 0)) { + if (res == 1 && (strcmp("test0.txt", &(entry.d_name[0])) == 0 || + strcmp("test1.txt", &(entry.d_name[0])) == 0)) { nb_files++; } } while (res == 1); @@ -305,7 +305,7 @@ static void tests_littlefs_readdir(void) nb_files = 0; do { res = vfs_readdir(&dirp, &entry); - if (res == 1 && strcmp("/test2.txt", &(entry.d_name[0])) == 0) { + if (res == 1 && strcmp("test2.txt", &(entry.d_name[0])) == 0) { nb_files++; } } while (res == 1);