mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 03:32:51 -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
|
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user