commit
3bf8cbc728
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue