2023-07-18 09:50:23 +02:00
|
|
|
#include "orbis/utils/Logs.hpp"
|
|
|
|
|
#include "stat.hpp"
|
2023-07-03 13:10:16 +02:00
|
|
|
#include "sys/sysproto.hpp"
|
|
|
|
|
|
2023-07-06 18:16:25 +02:00
|
|
|
orbis::SysResult orbis::sys_getdtablesize(Thread *thread) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_dup2(Thread *thread, uint from, uint to) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_dup(Thread *thread, uint fd) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_fcntl(Thread *thread, sint fd, sint cmd,
|
|
|
|
|
slong arg) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
2023-07-03 13:10:16 +02:00
|
|
|
orbis::SysResult orbis::sys_close(Thread *thread, sint fd) {
|
2023-07-19 17:04:26 +02:00
|
|
|
ORBIS_LOG_NOTICE(__FUNCTION__, fd);
|
2023-07-03 13:10:16 +02:00
|
|
|
if (auto close = thread->tproc->ops->close) {
|
|
|
|
|
return close(thread, fd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
2023-07-06 18:16:25 +02:00
|
|
|
orbis::SysResult orbis::sys_closefrom(Thread *thread, sint lowfd) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
2023-07-13 12:33:17 +02:00
|
|
|
orbis::SysResult orbis::sys_fstat(Thread *thread, sint fd, ptr<Stat> ub) {
|
2023-07-21 18:51:15 +02:00
|
|
|
ORBIS_LOG_WARNING(__FUNCTION__, fd, ub);
|
|
|
|
|
thread->where();
|
|
|
|
|
if (fd == 0) {
|
|
|
|
|
return ErrorCode::PERM;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto result = sys_lseek(thread, fd, 0, SEEK_CUR);
|
|
|
|
|
auto oldpos = thread->retval[0];
|
|
|
|
|
if (result.isError()) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = sys_lseek(thread, fd, 0, SEEK_END);
|
|
|
|
|
auto len = thread->retval[0];
|
|
|
|
|
if (result.isError()) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = sys_read(thread, fd, ub, 1);
|
|
|
|
|
if (result.isError()) {
|
|
|
|
|
*ub = {};
|
|
|
|
|
ub->mode = 0777 | 0x4000;
|
|
|
|
|
} else {
|
|
|
|
|
*ub = {};
|
|
|
|
|
ub->size = len;
|
|
|
|
|
ub->blksize = 1;
|
|
|
|
|
ub->blocks = len;
|
|
|
|
|
ub->mode = 0777 | 0x8000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = sys_lseek(thread, fd, oldpos, SEEK_SET);
|
|
|
|
|
if (result.isError()) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thread->retval[0] = 0;
|
|
|
|
|
return {};
|
2023-07-06 18:16:25 +02:00
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_nfstat(Thread *thread, sint fd,
|
|
|
|
|
ptr<struct nstat> sb) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_fpathconf(Thread *thread, sint fd, sint name) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|
|
|
|
|
orbis::SysResult orbis::sys_flock(Thread *thread, sint fd, sint how) {
|
|
|
|
|
return ErrorCode::NOSYS;
|
|
|
|
|
}
|