mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
fix gu_in_bytes_ to use buffering
This commit is contained in:
@@ -87,11 +87,20 @@ gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
|
||||
void
|
||||
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));
|
||||
memcpy(dst, &in->buf_end[in->buf_curr], avail_sz);
|
||||
in->buf_curr += avail_sz;
|
||||
if (avail_sz < sz) {
|
||||
gu_in_input(in, &dst[avail_sz], sz - avail_sz, err);
|
||||
for (;;) {
|
||||
size_t avail_sz = GU_MIN(sz, (size_t)(-in->buf_curr));
|
||||
memcpy(dst, &in->buf_end[in->buf_curr], avail_sz);
|
||||
in->buf_curr += avail_sz;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
typedef struct GuProxyInStream GuProxyInStream;
|
||||
|
||||
enum {
|
||||
GU_BUFFERED_IN_BUF_SIZE = 4096
|
||||
};
|
||||
|
||||
typedef struct GuBufferedInStream GuBufferedInStream;
|
||||
|
||||
struct GuBufferedInStream {
|
||||
|
||||
Reference in New Issue
Block a user