ioctl() IOCTL_STAT command

This commit is contained in:
2025-09-14 19:30:20 +02:00
parent 26ff717b50
commit 69e23a9ca3
5 changed files with 71 additions and 2 deletions

View File

@ -133,6 +133,35 @@ 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) {
ret = E_INVALIDARGUMENT;
goto done;
}
spinlock_acquire(&PROCS.spinlock);
Proc *proc = PROCS.current;
spinlock_release(&PROCS.spinlock);
VfsObj *vobj = proc->vobjs[ioh];
if (vobj == NULL) {
ret = E_INVALIDARGUMENT;
goto done;
}
VfsStat stat1;
ret = vobj->stat(vobj, &stat1);
IoctlStat *iostat = (IoctlStat *)arg1;
if (iostat == NULL) {
ret = E_INVALIDARGUMENT;
goto done;
}
iostat->size = stat1.size;
iostat->type = stat1.type;
} break;
default: {
ret = E_INVALIDARGUMENT;
goto done;