fix gu_in_bytes_ to use buffering

This commit is contained in:
kr.angelov
2013-09-05 12:10:55 +00:00
parent 7c0bad5092
commit ebc3fc51d0

View File

@@ -87,11 +87,20 @@ gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
void void
gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err) gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
{ {
size_t avail_sz = GU_MIN(sz, (size_t)(-in->buf_curr)); for (;;) {
memcpy(dst, &in->buf_end[in->buf_curr], avail_sz); size_t avail_sz = GU_MIN(sz, (size_t)(-in->buf_curr));
in->buf_curr += avail_sz; memcpy(dst, &in->buf_end[in->buf_curr], avail_sz);
if (avail_sz < sz) { in->buf_curr += avail_sz;
gu_in_input(in, &dst[avail_sz], sz - avail_sz, err); dst += avail_sz;
sz -= avail_sz;
if (sz == 0)
break;
if (!gu_in_begin_buffering(in, err)) {
gu_in_input(in, dst, sz, err);
return;
}
} }
} }
@@ -269,13 +278,6 @@ gu_new_in(GuInStream* stream, GuPool* pool)
return in; return in;
} }
typedef struct GuProxyInStream GuProxyInStream;
enum {
GU_BUFFERED_IN_BUF_SIZE = 4096
};
typedef struct GuBufferedInStream GuBufferedInStream; typedef struct GuBufferedInStream GuBufferedInStream;
struct GuBufferedInStream { struct GuBufferedInStream {