From b242f5a4637d0c3d1f0b02ab1040ab7aeb91978f Mon Sep 17 00:00:00 2001 From: James Walmsley Date: Mon, 28 Sep 2015 12:18:18 +0200 Subject: [PATCH] [FS] MkDir - Use relative paths correctly. --- os/src/fs/bt_fs.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/os/src/fs/bt_fs.c b/os/src/fs/bt_fs.c index 5ec039a7..85a11273 100755 --- a/os/src/fs/bt_fs.c +++ b/os/src/fs/bt_fs.c @@ -378,15 +378,42 @@ BT_HANDLE BT_Open(const BT_i8 *szpPath, BT_u32 mode, BT_ERROR *pError) { BT_EXPORT_SYMBOL(BT_Open); BT_ERROR BT_MkDir(const BT_i8 *szpPath) { - BT_MOUNTPOINT *pMount = BT_GetMountPoint(szpPath); + + BT_ERROR Error = BT_ERR_NONE; + + BT_i8 *absolute_path = (BT_i8 *) szpPath; + +#ifdef BT_CONFIG_PROCESS_CWD + absolute_path = BT_kMalloc(BT_PATH_MAX); + if(!absolute_path) { + Error = BT_ERR_GENERIC; + goto err_out; + } + + Error = to_absolute_path(absolute_path, BT_PATH_MAX, szpPath, BT_FALSE); + if(Error) { + goto err_free_out; + } +#endif + + BT_MOUNTPOINT *pMount = BT_GetMountPoint(absolute_path); if(!pMount) { - return BT_ERR_GENERIC; + Error = BT_ERR_GENERIC; + goto err_free_out; } - const BT_i8 *path = get_relative_path(pMount, szpPath); + const BT_i8 *path = get_relative_path(pMount, absolute_path); const BT_IF_FS *pFS = pMount->pFS->hFS->h.pIf->oIfs.pFilesystemIF; - return pFS->pfnMkDir(pMount->hMount, path); + Error = pFS->pfnMkDir(pMount->hMount, path); + +err_free_out: +#ifdef BT_CONFIG_PROCESS_CWD + BT_kFree(absolute_path); +err_out: +#endif + + return Error; } BT_EXPORT_SYMBOL(BT_MkDir);