From b458e12ed54905db6667f9d5db1410f94a3d6c71 Mon Sep 17 00:00:00 2001 From: li_zan <371442490@qq.com> Date: Fri, 25 Jun 2021 15:35:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20M=E6=A0=B8littlefs=E5=BD=93=E6=96=87?= =?UTF-8?q?=E4=BB=B6open=E5=A4=B1=E8=B4=A5=E6=97=B6=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=9B=9E=E6=94=B6fd=EF=BC=8C=E5=90=A6=E5=88=99?= =?UTF-8?q?=E4=BC=9A=E6=9C=89fd=E6=B3=84=E9=9C=B2=20close=EF=BC=9A#I3XU6R?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li_zan <371442490@qq.com> --- components/fs/littlefs/lfs_api.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/components/fs/littlefs/lfs_api.c b/components/fs/littlefs/lfs_api.c index ba83114b..b829d48f 100644 --- a/components/fs/littlefs/lfs_api.c +++ b/components/fs/littlefs/lfs_api.c @@ -59,6 +59,21 @@ LittleFsHandleStruct *LfsAllocFd(const char *fileName, int *fd) return NULL; } +static void LfsFreeFd(int fd) +{ + pthread_mutex_lock(&g_FslocalMutex); + g_handle[fd].useFlag = 0; + if (g_handle[fd].pathName != NULL) { + free(g_handle[fd].pathName); + g_handle[fd].pathName = NULL; + } + + if (g_handle[fd].lfsHandle != NULL) { + g_handle[fd].lfsHandle = NULL; + } + pthread_mutex_unlock(&g_FslocalMutex); +} + BOOL CheckFileIsOpen(const char *fileName) { pthread_mutex_lock(&g_FslocalMutex); @@ -285,7 +300,7 @@ static int LittlefsErrno(int result) status = ENOTDIR; break; case LFS_ERR_NOENT: - status = ENFILE; + status = ENOENT; break; case LFS_ERR_EXIST: status = EEXIST; @@ -608,6 +623,7 @@ int LfsOpen(const char *pathName, int openFlag, int mode) int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag); err = lfs_file_open(&(fileOpInfo->lfsInfo), &(fsHandle->file), pathName, lfsOpenFlag); if (err != 0) { + LfsFreeFd(fd); errno = LittlefsErrno(err); goto errout; } @@ -695,17 +711,10 @@ int LfsClose(int fd) pthread_mutex_lock(&g_FslocalMutex); ret = lfs_file_close(g_handle[fd].lfsHandle, &(g_handle[fd].file)); - g_handle[fd].useFlag = 0; - if (g_handle[fd].pathName != NULL) { - free(g_handle[fd].pathName); - g_handle[fd].pathName = NULL; - } - - if (g_handle[fd].lfsHandle != NULL) { - g_handle[fd].lfsHandle = NULL; - } pthread_mutex_unlock(&g_FslocalMutex); + LfsFreeFd(fd); + if (ret != 0) { errno = LittlefsErrno(ret); }