+ stream_sys_t *sys = stream->p_sys;
+ unsigned ret = 0;
+
+ if (buf == NULL) /* caller skips data, get big enough peek buffer */
+ buflen = Peek (stream, &(const uint8_t *){ NULL }, buflen);
+
+ block_t *peeked = sys->peeked;
+ if (peeked != NULL)
+ { /* dequeue peeked data */
+ size_t length = peeked->i_buffer;
+ if (length > buflen)
+ length = buflen;
+
+ if (buf != NULL)
+ {
+ memcpy (buf, peeked->p_buffer, length);
+ buf = ((char *)buf) + length;
+ }
+ buflen -= length;
+ peeked->p_buffer += length;
+ peeked->i_buffer -= length;