* SysReceive (sockfd, buf, len, flags) - Receive data through a socket * sockfd - Socket file descriptor * buf - data * len - data length * flags - flags * * On Success - return amount of data read * On Failure - return -1 */
| 1405 | * On Failure - return -1 |
| 1406 | */ |
| 1407 | long SysReceive(regs64_t* r){ |
| 1408 | process_t* proc = Scheduler::GetCurrentProcess(); |
| 1409 | fs_fd_t* handle = proc->fileDescriptors.get_at(SC_ARG0(r)); |
| 1410 | |
| 1411 | uint8_t* buffer = (uint8_t*)(SC_ARG1(r)); |
| 1412 | size_t len = SC_ARG2(r); |
| 1413 | uint64_t flags = SC_ARG3(r); |
| 1414 | |
| 1415 | if(!handle){ |
| 1416 | Log::Warning("sys_send: Invalid file descriptor: ", SC_ARG0(r)); |
| 1417 | return -1; |
| 1418 | } |
| 1419 | |
| 1420 | if((handle->node->flags & FS_NODE_TYPE) != FS_NODE_SOCKET){ |
| 1421 | Log::Warning("sys_send: File (Descriptor: %d) is not a socket", SC_ARG0(r)); |
| 1422 | return -2; |
| 1423 | } |
| 1424 | |
| 1425 | if(!Memory::CheckUsermodePointer(SC_ARG1(r), len, proc->addressSpace)){ |
| 1426 | Log::Warning("sys_send: Invalid buffer ptr"); |
| 1427 | return -3; |
| 1428 | } |
| 1429 | |
| 1430 | Socket* sock = (Socket*)handle->node; |
| 1431 | return sock->Receive(buffer, len, flags); |
| 1432 | } |
| 1433 | |
| 1434 | /* |
| 1435 | * SysReceiveFrom (sockfd, buf, len, flags, srcaddr, addrlen) - Receive data through a socket |
nothing calls this directly
no test coverage detected