| 177 | } |
| 178 | |
| 179 | void pseudo_sync_write(HANDLE pipe, HANDLE event, const uint8_t* buf, uint32_t len) { |
| 180 | OVERLAPPED tempOverlap; |
| 181 | memset(&tempOverlap, 0, sizeof(tempOverlap)); |
| 182 | tempOverlap.hEvent = event; |
| 183 | |
| 184 | uint32_t written = 0; |
| 185 | while (written < len) { |
| 186 | BOOL result = ::WriteFile(pipe, buf + written, len - written, nullptr, &tempOverlap); |
| 187 | |
| 188 | if (result == FALSE && ::GetLastError() != ERROR_IO_PENDING) { |
| 189 | TOutput::instance().perror("TPipe ::WriteFile errored GLE=", ::GetLastError()); |
| 190 | throw TTransportException(TTransportException::UNKNOWN, "TPipe: write failed"); |
| 191 | } |
| 192 | |
| 193 | DWORD bytes = 0; |
| 194 | result = ::GetOverlappedResult(pipe, &tempOverlap, &bytes, TRUE); |
| 195 | if (!result) { |
| 196 | TOutput::instance().perror("TPipe ::GetOverlappedResult errored GLE=", ::GetLastError()); |
| 197 | throw TTransportException(TTransportException::UNKNOWN, "TPipe: GetOverlappedResult failed"); |
| 198 | } |
| 199 | written += bytes; |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | uint32_t pseudo_sync_read(HANDLE pipe, HANDLE event, uint8_t* buf, uint32_t len) { |
| 204 | OVERLAPPED tempOverlap; |
no test coverage detected