/** * @interface_method_impl{RTVFSIOSTREAMOPS,pfnPollOne} */ static DECLCALLBACK(int) rtZipGzip_PollOne(void *pvThis, uint32_t fEvents, RTMSINTERVAL cMillies, bool fIntr, uint32_t *pfRetEvents) { PRTZIPGZIPSTREAM pThis = (PRTZIPGZIPSTREAM)pvThis; /* * Collect our own events first and see if that satisfies the request. If * not forward the call to the compressed stream. */ uint32_t fRetEvents = 0; if (pThis->fFatalError) fRetEvents |= RTPOLL_EVT_ERROR; if (pThis->fDecompress) { fEvents &= ~RTPOLL_EVT_WRITE; if (pThis->Zlib.avail_in > 0) fRetEvents = RTPOLL_EVT_READ; } else { fEvents &= ~RTPOLL_EVT_READ; if (pThis->Zlib.avail_out > 0) fRetEvents = RTPOLL_EVT_WRITE; } int rc = VINF_SUCCESS; fRetEvents &= fEvents; if (!fRetEvents) rc = RTVfsIoStrmPoll(pThis->hVfsIos, fEvents, cMillies, fIntr, pfRetEvents); return rc; }
/** * @interface_method_impl{RTVFSIOSTREAMOPS,pfnPollOne} */ static DECLCALLBACK(int) rtZipTarFssIos_PollOne(void *pvThis, uint32_t fEvents, RTMSINTERVAL cMillies, bool fIntr, uint32_t *pfRetEvents) { PRTZIPTARIOSTREAM pThis = (PRTZIPTARIOSTREAM)pvThis; /* When we've reached the end, read will be set to indicate it. */ if ( (fEvents & RTPOLL_EVT_READ) && pThis->fEndOfStream) { int rc = RTVfsIoStrmPoll(pThis->hVfsIos, fEvents, 0, fIntr, pfRetEvents); if (RT_SUCCESS(rc)) *pfRetEvents |= RTPOLL_EVT_READ; else *pfRetEvents = RTPOLL_EVT_READ; return VINF_SUCCESS; } return RTVfsIoStrmPoll(pThis->hVfsIos, fEvents, cMillies, fIntr, pfRetEvents); }
/** * @interface_method_impl{RTVFSIOSTREAMOPS,pfnPollOne} */ static DECLCALLBACK(int) rtManifestPtIos_PollOne(void *pvThis, uint32_t fEvents, RTMSINTERVAL cMillies, bool fIntr, uint32_t *pfRetEvents) { PRTMANIFESTPTIOS pThis = (PRTMANIFESTPTIOS)pvThis; return RTVfsIoStrmPoll(pThis->hVfsIos, fEvents, cMillies, fIntr, pfRetEvents); }