fix(platform/usbd_fatfs_mtp): DIR with dynamic

Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
sakumisu
2025-05-27 18:22:46 +08:00
parent e65b8c0614
commit e3c50cde10

View File

@@ -1,18 +1,16 @@
/* /*
* Copyright (c) 2025 sakumisu * Copyright (c) 2025, sakumisu
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*
*/ */
#include "ff.h" #include "ff.h"
#include "diskio.h" #include "diskio.h"
#include "usbd_core.h" #include "usbd_core.h"
#include "usb_osal.h"
#include "usbd_mtp.h" #include "usbd_mtp.h"
FATFS s_sd_disk; FATFS s_sd_disk;
FIL s_file; FIL s_file;
DIR s_dir;
BYTE work[FF_MAX_SS]; BYTE work[FF_MAX_SS];
const TCHAR driver_num_buf[4] = { '0', ':', '/', '\0' }; 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) MTP_DIR *usbd_mtp_opendir(const char *name)
{ {
f_opendir(&s_dir, name); FRESULT result;
return (MTP_DIR *)&s_dir; 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) 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) struct mtp_dirent *usbd_mtp_readdir(MTP_DIR *dir)