提交 3bf8cbc7 编写于 作者: O openharmony_ci 提交者: Gitee

!301 修复SysOpenat返回的文件句柄不正确的问题

Merge pull request !301 from JING/openat
......@@ -1556,6 +1556,7 @@ int SysFtruncate64(int fd, off64_t length)
int SysOpenat(int dirfd, const char *path, int oflags, ...)
{
int ret;
int procFd;
char *pathRet = NULL;
mode_t mode;
#ifdef LOSCFG_FILE_MODE
......@@ -1571,10 +1572,16 @@ int SysOpenat(int dirfd, const char *path, int oflags, ...)
if (path != NULL) {
ret = UserPathCopy(path, &pathRet);
if (ret != 0) {
goto OUT;
return ret;
}
}
procFd = AllocProcessFd();
if (procFd < 0) {
ret = -EMFILE;
goto ERROUT;
}
if (dirfd != AT_FDCWD) {
/* Process fd convert to system global fd */
dirfd = GetAssociatedSystemFd(dirfd);
......@@ -1583,12 +1590,22 @@ int SysOpenat(int dirfd, const char *path, int oflags, ...)
ret = do_open(dirfd, (path ? pathRet : NULL), oflags, mode);
if (ret < 0) {
ret = -get_errno();
goto ERROUT;
}
OUT:
AssociateSystemFd(procFd, ret);
if (pathRet != NULL) {
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
}
return procFd;
ERROUT:
if (pathRet != NULL) {
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
}
if (procFd >= 0) {
FreeProcessFd(procFd);
}
return ret;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册