From e3c50cde1072f857feb44ca849f9725b7aa0623f Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Tue, 27 May 2025 18:22:46 +0800 Subject: fix(platform/usbd_fatfs_mtp): DIR with dynamic Signed-off-by: sakumisu <1203593632@qq.com> --- platform/fatfs/usbd_fatfs_mtp.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/platform/fatfs/usbd_fatfs_mtp.c b/platform/fatfs/usbd_fatfs_mtp.c index 3298560c..e8ccb439 100644 --- a/platform/fatfs/usbd_fatfs_mtp.c +++ b/platform/fatfs/usbd_fatfs_mtp.c @@ -1,18 +1,16 @@ /* - * Copyright (c) 2025 sakumisu + * Copyright (c) 2025, sakumisu * * SPDX-License-Identifier: Apache-2.0 - * */ - #include "ff.h" #include "diskio.h" #include "usbd_core.h" +#include "usb_osal.h" #include "usbd_mtp.h" FATFS s_sd_disk; FIL s_file; -DIR s_dir; BYTE work[FF_MAX_SS]; const TCHAR driver_num_buf[4] = { '0', ':', '/', '\0' }; @@ -172,13 +170,29 @@ int usbd_mtp_rmdir(const char *path) MTP_DIR *usbd_mtp_opendir(const char *name) { - f_opendir(&s_dir, name); - return (MTP_DIR *)&s_dir; + FRESULT result; + DIR *dir; + + dir = usb_osal_malloc(sizeof(DIR)); + result = f_opendir(dir, name); + if (result != FR_OK) { + printf("f_opendir failed, cause: %s\n", show_error_string(result)); + usb_osal_free(dir); + return NULL; // Failed to open directory + } + return (MTP_DIR *)dir; } int usbd_mtp_closedir(MTP_DIR *dir) { - return f_closedir((DIR *)dir); + FRESULT result; + result = f_closedir((DIR *)dir); + if (result != FR_OK) { + printf("f_closedir failed, cause: %s\n", show_error_string(result)); + return -1; // Failed to close directory + } + usb_osal_free(dir); // Free the directory structure + return result; } struct mtp_dirent *usbd_mtp_readdir(MTP_DIR *dir) -- cgit v1.3.1