+ if (fo->bufWPtr - fo->bufRPtr >= len) {
+ /* buffer has enough data to fulfill the request */
+ memcpy(buf, fo->buf + fo->bufRPtr, len);
+ fo->bufRPtr += len;
+ return len;
+ } else {
+ /* can only partially fulfill the request from the buffer */
+ count = fo->bufWPtr - fo->bufRPtr;
+ memcpy(buf, fo->buf + fo->bufRPtr, count);
+ fo->bufWPtr=0;
+ fo->bufRPtr=0;
+ len -= count;
+ p += count;
+ total_count = count;
+ }
+ }