Changeset 36744 in vbox for trunk/src/VBox/Additions/common/VBoxService
- Timestamp:
- Apr 20, 2011 10:05:09 AM (14 years ago)
- Location:
- trunk/src/VBox/Additions/common/VBoxService
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxService/VBoxServicePipeBuf.cpp
r36321 r36744 114 114 } 115 115 rc = RTCritSectLeave(&pBuf->CritSect); 116 } 117 return rc; 118 } 119 120 121 int VBoxServicePipeBufPeek(PVBOXSERVICECTRLEXECPIPEBUF pBuf, 122 uint8_t *pbBuffer, uint32_t cbBuffer, 123 uint32_t cbOffset, 124 uint32_t *pcbRead, uint32_t *pcbLeft) 125 { 126 AssertPtrReturn(pBuf, VERR_INVALID_POINTER); 127 AssertPtrReturn(pbBuffer, VERR_INVALID_POINTER); 128 AssertReturn(cbBuffer, VERR_INVALID_PARAMETER); 129 130 int rc = RTCritSectEnter(&pBuf->CritSect); 131 if (RT_SUCCESS(rc)) 132 { 133 Assert(pBuf->cbSize >= pBuf->cbOffset); 134 if (cbOffset > pBuf->cbSize) 135 cbOffset = pBuf->cbSize; 136 uint32_t cbToRead = pBuf->cbSize - cbOffset; 137 if (cbToRead > cbBuffer) 138 cbToRead = cbBuffer; 139 if (cbToRead) 140 { 141 memcpy(pbBuffer, pBuf->pbData + cbOffset, cbToRead); 142 pbBuffer[cbBuffer - 1] = '\0'; 143 } 144 if (pcbRead) 145 *pcbRead = cbToRead; 146 if (pcbLeft) 147 *pcbLeft = pBuf->cbSize - (cbOffset + cbToRead); 148 149 int rc2 = RTCritSectLeave(&pBuf->CritSect); 150 if (RT_SUCCESS(rc)) 151 rc = rc2; 116 152 } 117 153 return rc; … … 222 258 RTSemEventSignal(pBuf->hEventSem); 223 259 } 224 int rc2 = RTCritSectLeave(&pBuf->CritSect);225 if (RT_SUCCESS(rc))226 rc = rc2;227 260 } 228 261 else 229 262 rc = VERR_BAD_PIPE; 263 264 int rc2 = RTCritSectLeave(&pBuf->CritSect); 265 if (RT_SUCCESS(rc)) 266 rc = rc2; 230 267 } 231 268 return rc; … … 377 414 int VBoxServicePipeBufWaitForEvent(PVBOXSERVICECTRLEXECPIPEBUF pBuf, RTMSINTERVAL cMillies) 378 415 { 379 int rc = RTCritSectEnter(&pBuf->CritSect); 380 if (RT_SUCCESS(rc)) 381 { 382 rc = RTSemEventWait(pBuf->hEventSem, cMillies); 383 int rc2 = RTCritSectLeave(&pBuf->CritSect); 384 if (RT_SUCCESS(rc)) 385 rc = rc2; 386 } 387 return rc; 416 AssertPtrReturn(pBuf, VERR_INVALID_POINTER); 417 418 /* Don't enter the critical section here; someone else could signal the event semaphore 419 * and this will deadlock then ... */ 420 return RTSemEventWait(pBuf->hEventSem, cMillies); 388 421 } 389 422 -
trunk/src/VBox/Additions/common/VBoxService/VBoxServicePipeBuf.h
r36321 r36744 24 24 int VBoxServicePipeBufRead(PVBOXSERVICECTRLEXECPIPEBUF pBuf, 25 25 uint8_t *pbBuffer, uint32_t cbBuffer, uint32_t *pcbToRead); 26 int VBoxServicePipeBufPeek(PVBOXSERVICECTRLEXECPIPEBUF pBuf, 27 uint8_t *pbBuffer, uint32_t cbBuffer, 28 uint32_t cbOffset, 29 uint32_t *pcbRead, uint32_t *pcbLeft); 26 30 int VBoxServicePipeBufWriteToBuf(PVBOXSERVICECTRLEXECPIPEBUF pBuf, 27 31 uint8_t *pbData, uint32_t cbData, bool fPendingClose, uint32_t *pcbWritten);
Note:
See TracChangeset
for help on using the changeset viewer.