Changeset 39690 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Dec 30, 2011 1:06:50 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 75528
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/os2/pipe-os2.cpp
r28800 r39690 95 95 } 96 96 97 98 RTDECL(int) RTPipeQueryReadable(RTPIPE hPipe, size_t *pcbReadable) 99 { 100 return VERR_NOT_IMPLEMENTED; 101 } 102 -
trunk/src/VBox/Runtime/r3/posix/pipe-posix.cpp
r39489 r39690 44 44 #include <limits.h> 45 45 #include <unistd.h> 46 #include <sys/ioctl.h> 46 47 #include <sys/poll.h> 47 48 #include <sys/stat.h> … … 638 639 } 639 640 641 642 RTDECL(int) RTPipeQueryReadable(RTPIPE hPipe, size_t *pcbReadable) 643 { 644 RTPIPEINTERNAL *pThis = hPipe; 645 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 646 AssertReturn(pThis->u32Magic == RTPIPE_MAGIC, VERR_INVALID_HANDLE); 647 AssertReturn(pThis->fRead, VERR_PIPE_NOT_READ); 648 AssertPtrReturn(pcbReadable, VERR_INVALID_POINTER); 649 650 int cb = 0; 651 int rc = ioctl(pThis->fd, FIONREAD, &cb); 652 if (rc != -1) 653 { 654 AssertStmt(cb >= 0, cb = 0); 655 *pcbReadable = cb; 656 return VINF_SUCCESS; 657 } 658 659 rc = errno; 660 if (rc == ENOTTY) 661 rc = VERR_NOT_SUPPORTED; 662 else 663 rc = RTErrConvertFromErrno(rc); 664 return rc; 665 } 666 -
trunk/src/VBox/Runtime/r3/win/pipe-win.cpp
r34119 r39690 1148 1148 1149 1149 1150 RTDECL(int) RTPipeQueryReadable(RTPIPE hPipe, size_t *pcbReadable) 1151 { 1152 RTPIPEINTERNAL *pThis = hPipe; 1153 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 1154 AssertReturn(pThis->u32Magic == RTPIPE_MAGIC, VERR_INVALID_HANDLE); 1155 AssertReturn(pThis->fRead, VERR_PIPE_NOT_READ); 1156 AssertPtrReturn(pcbReadable, VERR_INVALID_POINTER); 1157 1158 int rc = RTCritSectEnter(&pThis->CritSect); 1159 if (RT_FAILURE(rc)) 1160 return rc; 1161 1162 DWORD cbAvailable = 0; 1163 if (PeekNamedPipe(pThis->hPipe, NULL, 0, NULL, &cbAvailable, NULL) 1164 *pcbReadable = cbAvailable; 1165 else 1166 rc = RTErrConvertFromWin32(GetLastError()); 1167 1168 RTCritSectLeave(&pThis->CritSect); 1169 return rc; 1170 } 1171 1172 1150 1173 /** 1151 1174 * Internal RTPollSetAdd helper that returns the handle that should be added to -
trunk/src/VBox/Runtime/testcase/tstRTPipe.cpp
r38636 r39690 351 351 RTTESTI_CHECK_RC_RETV(RTPipeWrite(hPipeW, "BigQ", 4, &cbWritten), VINF_SUCCESS); 352 352 RTTESTI_CHECK_RETV(cbWritten == 4); 353 cbRead = ~(size_t)0;354 353 RTTESTI_CHECK_RC_RETV(RTPipeSelectOne(hPipeR, 0), VINF_SUCCESS); 355 354 RTTESTI_CHECK_RC_RETV(RTPipeSelectOne(hPipeR, 1), VINF_SUCCESS); 355 cbRead = ~(size_t)0; 356 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 357 RTTESTI_CHECK_MSG(cbRead == cbWritten, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 358 cbRead = ~(size_t)0; 356 359 RTTESTI_CHECK_RC_RETV(RTPipeRead(hPipeR, abBuf, sizeof(abBuf), &cbRead), VINF_SUCCESS); 357 360 RTTESTI_CHECK_RETV(cbRead == 4); … … 362 365 RTTESTI_CHECK_RETV(cbWritten == 4); 363 366 cbRead = ~(size_t)0; 367 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 368 RTTESTI_CHECK_MSG(cbRead == cbWritten, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 369 cbRead = ~(size_t)0; 364 370 RTTESTI_CHECK_RC_RETV(RTPipeRead(hPipeR, &abBuf[0], 1, &cbRead), VINF_SUCCESS); 365 371 RTTESTI_CHECK_RETV(cbRead == 1); 366 372 cbRead = ~(size_t)0; 373 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 374 RTTESTI_CHECK_MSG(cbRead == cbWritten - 1, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 375 cbRead = ~(size_t)0; 367 376 RTTESTI_CHECK_RC_RETV(RTPipeRead(hPipeR, &abBuf[1], 1, &cbRead), VINF_SUCCESS); 368 377 RTTESTI_CHECK_RETV(cbRead == 1); 369 378 cbRead = ~(size_t)0; 379 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 380 RTTESTI_CHECK_MSG(cbRead == cbWritten - 2, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 381 cbRead = ~(size_t)0; 370 382 RTTESTI_CHECK_RC_RETV(RTPipeRead(hPipeR, &abBuf[2], 1, &cbRead), VINF_SUCCESS); 371 383 RTTESTI_CHECK_RETV(cbRead == 1); 384 cbRead = ~(size_t)0; 385 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 386 RTTESTI_CHECK_MSG(cbRead == cbWritten - 3, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 372 387 cbRead = ~(size_t)0; 373 388 RTTESTI_CHECK_RC_RETV(RTPipeRead(hPipeR, &abBuf[3], 1, &cbRead), VINF_SUCCESS); 374 389 RTTESTI_CHECK_RETV(cbRead == 1); 375 390 RTTESTI_CHECK_RETV(!memcmp(abBuf, "H2G2", 4)); 391 cbRead = ~(size_t)0; 392 RTTESTI_CHECK_RC_RETV(RTPipeQueryReadable(hPipeR, &cbRead), VINF_SUCCESS); 393 RTTESTI_CHECK_MSG(cbRead == cbWritten - 4, ("cbRead=%zu cbWritten=%zu\n", cbRead, cbWritten)); 376 394 377 395 RTTESTI_CHECK_RC_RETV(RTPipeClose(hPipeR), VINF_SUCCESS);
Note:
See TracChangeset
for help on using the changeset viewer.