| 957 | } |
| 958 | |
| 959 | long SysPRead(regs64_t* r){ |
| 960 | if(SC_ARG0(r) > Scheduler::GetCurrentProcess()->fileDescriptors.get_length()){ |
| 961 | return -EBADF; |
| 962 | } |
| 963 | FsNode* node; |
| 964 | if(Scheduler::GetCurrentProcess()->fileDescriptors.get_at(SC_ARG0(r)) || !(node = Scheduler::GetCurrentProcess()->fileDescriptors.get_at(SC_ARG0(r))->node)){ |
| 965 | Log::Warning("sys_pread: Invalid file descriptor: %d", SC_ARG0(r)); |
| 966 | return -EBADF; |
| 967 | } |
| 968 | |
| 969 | if(!Memory::CheckUsermodePointer(SC_ARG1(r), SC_ARG2(r), Scheduler::GetCurrentProcess()->addressSpace)) { |
| 970 | return -EFAULT; |
| 971 | } |
| 972 | |
| 973 | uint8_t* buffer = (uint8_t*)SC_ARG1(r); |
| 974 | uint64_t count = SC_ARG2(r); |
| 975 | uint64_t off = SC_ARG4(r); |
| 976 | return fs::Read(node, off, count, buffer); |
| 977 | } |
| 978 | |
| 979 | long SysPWrite(regs64_t* r){ |
| 980 | if(SC_ARG0(r) > Scheduler::GetCurrentProcess()->fileDescriptors.get_length()){ |
nothing calls this directly
no test coverage detected