ioctl() IOCTL_STAT use path instead of already open io handle

This commit is contained in:
2025-10-02 23:57:38 +02:00
parent c345e2284e
commit 2cfd3ee2fa
4 changed files with 21 additions and 8 deletions

View File

@ -134,25 +134,29 @@ int32_t SYSCALL5(sys_ioctl, ioh1, cmd1, arg1, arg2, arg3) {
ret = vobj->read(vobj, buffer, len, off);
} break;
case IOCTL_STAT: {
if (ioh >= PROC_VFSHANDLES_MAX) {
const char *opath = (const char *)arg2;
if (opath == NULL) {
ret = E_INVALIDARGUMENT;
goto done;
}
spinlock_acquire(&PROCS.spinlock);
Proc *proc = PROCS.current;
spinlock_release(&PROCS.spinlock);
char mp[IOCTL_MP_MAX];
char path[IOCTL_PATH_MAX];
VfsObj *vobj = proc->vobjs[ioh];
path_parse(opath, mp, path);
VfsObj *vobj = vfs_open(mp, path, IOCTL_F_READ);
if (vobj == NULL) {
ret = E_INVALIDARGUMENT;
ret = E_NOENTRY;
goto done;
}
VfsStat stat1;
ret = vobj->stat(vobj, &stat1);
vfs_close(vobj);
IoctlStat *iostat = (IoctlStat *)arg1;
if (iostat == NULL) {
ret = E_INVALIDARGUMENT;