| 340 | } |
| 341 | |
| 342 | fextl::string RequestRootFSPath(int ServerSocket) { |
| 343 | FEXServerRequestPacket Req { |
| 344 | .Header { |
| 345 | .Type = PacketType::TYPE_GET_ROOTFS_PATH, |
| 346 | }, |
| 347 | }; |
| 348 | |
| 349 | int Result = write(ServerSocket, &Req, sizeof(Req.BasicRequest)); |
| 350 | if (Result != -1) { |
| 351 | // Wait for success response with data |
| 352 | fextl::vector<char> Data(PATH_MAX + sizeof(FEXServerResultPacket)); |
| 353 | |
| 354 | ssize_t DataResult = recv(ServerSocket, Data.data(), Data.size(), 0); |
| 355 | if (DataResult >= sizeof(FEXServerResultPacket)) { |
| 356 | FEXServerResultPacket* ResultPacket = reinterpret_cast<FEXServerResultPacket*>(Data.data()); |
| 357 | if (ResultPacket->Header.Type == PacketType::TYPE_GET_ROOTFS_PATH && ResultPacket->MountPath.Length > 0) { |
| 358 | return fextl::string(ResultPacket->MountPath.Mount); |
| 359 | } |
| 360 | } |
| 361 | } |
| 362 | |
| 363 | return {}; |
| 364 | } |
| 365 | |
| 366 | int RequestPIDFD(int ServerSocket) { |
| 367 | return RequestPIDFDPacket(ServerSocket, PacketType::TYPE_GET_PID_FD); |
no test coverage detected