diff --git a/include/fs/fs.h b/include/fs/fs.h index f717e8cd453..dd9b2f7e4ae 100644 --- a/include/fs/fs.h +++ b/include/fs/fs.h @@ -234,6 +234,20 @@ static inline void fs_file_t_init(struct fs_file_t *zfp) *zfp = (struct fs_file_t){ 0 }; } +/** + * @brief Initialize fs_dir_t object + * + * Initializes the fs_dir_t object; the function needs to be invoked + * on object before first use with fs_opendir. + * + * @param zdp Pointer to file object + * + */ +static inline void fs_dir_t_init(struct fs_dir_t *zdp) +{ + *zdp = (struct fs_dir_t){ 0 }; +} + /** * @brief Open or create file * diff --git a/include/fs/fs_interface.h b/include/fs/fs_interface.h index d1a30da7460..1ca1be08140 100644 --- a/include/fs/fs_interface.h +++ b/include/fs/fs_interface.h @@ -59,6 +59,8 @@ struct fs_file_t { /** * @brief Directory object representing an open directory * + * The object needs to be initialized with function fs_dir_t_init(). + * * @param dirp Pointer to directory object structure * @param mp Pointer to mount point structure */ diff --git a/tests/subsys/fs/fs_api/src/main.c b/tests/subsys/fs/fs_api/src/main.c index 5bd1847c440..7c6e2cdb012 100644 --- a/tests/subsys/fs/fs_api/src/main.c +++ b/tests/subsys/fs/fs_api/src/main.c @@ -73,6 +73,7 @@ void test_main(void) fs_setup, dummy_teardown), ztest_unit_test(test_fs_file_t_init), + ztest_unit_test(test_fs_dir_t_init), ztest_unit_test(test_file_statvfs), ztest_unit_test(test_mkdir), ztest_unit_test(test_opendir), diff --git a/tests/subsys/fs/fs_api/src/test_fs.h b/tests/subsys/fs/fs_api/src/test_fs.h index 2e423e4652a..6e017ce5742 100644 --- a/tests/subsys/fs/fs_api/src/test_fs.h +++ b/tests/subsys/fs/fs_api/src/test_fs.h @@ -32,6 +32,7 @@ struct test_fs_data { int reserve; }; +void test_fs_dir_t_init(void); void test_fs_file_t_init(void); void test_fs_register(void); void test_mount(void); diff --git a/tests/subsys/fs/fs_api/src/test_fs_dir_file.c b/tests/subsys/fs/fs_api/src/test_fs_dir_file.c index 50301042e8e..f120c0997d8 100644 --- a/tests/subsys/fs/fs_api/src/test_fs_dir_file.c +++ b/tests/subsys/fs/fs_api/src/test_fs_dir_file.c @@ -93,6 +93,20 @@ void test_fs_file_t_init(void) zassert_equal(fst.flags, 0, "Expected to be initialized to 0"); } +/** + * @brief Test fs_dir_t_init initializer + */ +void test_fs_dir_t_init(void) +{ + struct fs_dir_t dirp; + + memset(&dirp, 0xff, sizeof(dirp)); + + fs_dir_t_init(&dirp); + zassert_equal(dirp.mp, NULL, "Expected to be initialized to NULL"); + zassert_equal(dirp.dirp, NULL, "Expected to be initialized to NULL"); +} + /** * @brief Test mount interface of filesystem * @@ -263,7 +277,8 @@ void test_opendir(void) TC_PRINT("\nopendir tests:\n"); - memset(&dirp, 0, sizeof(dirp)); + fs_dir_t_init(&dirp); + TC_PRINT("Test null path\n"); ret = fs_opendir(NULL, NULL); zassert_not_equal(ret, 0, "Open dir with NULL pointer parameter"); @@ -307,7 +322,7 @@ void test_closedir(void) struct fs_dir_t dirp; TC_PRINT("\nclosedir tests: %s\n", TEST_DIR); - memset(&dirp, 0, sizeof(dirp)); + fs_dir_t_init(&dirp); ret = fs_opendir(&dirp, TEST_DIR); zassert_equal(ret, 0, "Fail to open dir"); @@ -331,7 +346,7 @@ static int _test_lsdir(const char *path) TC_PRINT("\nlsdir tests:\n"); - memset(&dirp, 0, sizeof(dirp)); + fs_dir_t_init(&dirp); memset(&entry, 0, sizeof(entry)); TC_PRINT("read an unopened dir\n");