fix(fatfs): Fixed uninitialized FATFS pointer for already mounted path

This commit is contained in:
Martin Vychodil
2026-04-07 12:08:49 +02:00
parent 23298ce2df
commit 26ceedb5f8
5 changed files with 14 additions and 7 deletions
@@ -26,7 +26,7 @@ static char drv[3];
static void test_setup(void)
{
FATFS *fs;
FATFS *fs = nullptr;
esp_err_t ret = ESP_OK;
FRESULT fr_result;
+3 -1
View File
@@ -66,7 +66,9 @@ typedef struct {
* @param[out] out_fs pointer to FATFS structure which can be used for FATFS f_mount call is returned via this argument.
* @return
* - ESP_OK on success
* - ESP_ERR_INVALID_STATE if esp_vfs_fat_register was already called
* - ESP_ERR_INVALID_STATE if a filesystem is already registered at this base path.
* If @p out_fs is not NULL, @p *out_fs is set to the existing FATFS object so callers
* can run f_mount (e.g. remount the same path).
* - ESP_ERR_NO_MEM if not enough memory or too many VFSes already registered
*/
esp_err_t esp_vfs_fat_register(const esp_vfs_fat_conf_t* conf, FATFS** out_fs);
+7 -2
View File
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -179,6 +179,9 @@ esp_err_t esp_vfs_fat_register(const esp_vfs_fat_conf_t* conf, FATFS** out_fs)
{
size_t ctx = find_context_index_by_path(conf->base_path);
if (ctx < FF_VOLUMES) {
if (out_fs) {
*out_fs = &s_fat_ctxs[ctx]->fs;
}
return ESP_ERR_INVALID_STATE;
}
@@ -221,7 +224,9 @@ esp_err_t esp_vfs_fat_register(const esp_vfs_fat_conf_t* conf, FATFS** out_fs)
//compatibility
s_fat_ctx = fat_ctx;
*out_fs = &fat_ctx->fs;
if (out_fs) {
*out_fs = &fat_ctx->fs;
}
return ESP_OK;
}
+1 -1
View File
@@ -116,7 +116,7 @@ esp_err_t esp_vfs_fat_bdl_mount(const char *base_path,
ESP_GOTO_ON_ERROR(ff_diskio_register_bdl(pdrv, bdl_handle), fail, TAG,
"ff_diskio_register_bdl failed pdrv=%i, error - 0x(%x)", pdrv, ret);
FATFS *fs;
FATFS *fs = NULL;
esp_vfs_fat_conf_t conf = {
.base_path = base_path,
.fat_drive = drv,
+2 -2
View File
@@ -171,7 +171,7 @@ esp_err_t esp_vfs_fat_spiflash_mount_rw_wl(const char* base_path,
char drv[3] = {(char)('0' + pdrv), ':', 0};
ESP_GOTO_ON_ERROR(ff_diskio_register_wl_partition(pdrv, *wl_handle), fail, TAG, "ff_diskio_register_wl_partition failed pdrv=%i, error - 0x(%x)", pdrv, ret);
FATFS *fs;
FATFS *fs = NULL;
esp_vfs_fat_conf_t conf = {
.base_path = base_path,
.fat_drive = drv,
@@ -366,7 +366,7 @@ esp_err_t esp_vfs_fat_spiflash_mount_ro(const char* base_path,
char drv[3] = {(char)('0' + pdrv), ':', 0};
ESP_GOTO_ON_ERROR(ff_diskio_register_raw_partition(pdrv, data_partition), fail, TAG, "ff_diskio_register_raw_partition failed pdrv=%i, error - 0x(%x)", pdrv, ret);
FATFS *fs;
FATFS *fs = NULL;
esp_vfs_fat_conf_t conf = {
.base_path = base_path,
.fat_drive = drv,