123456789101112131415161718192021222324252627282930313233 |
- #include "flakystream.h"
- #include <string.h>
- bool flakystream_callback(pb_istream_t *stream, pb_byte_t *buf, size_t count)
- {
- flakystream_t *state = stream->state;
- if (state->position + count > state->msglen)
- {
- stream->bytes_left = 0;
- return false;
- }
- else if (state->position + count > state->fail_after)
- {
- PB_RETURN_ERROR(stream, "flaky error");
- }
- memcpy(buf, state->buffer + state->position, count);
- state->position += count;
- return true;
- }
- void flakystream_init(flakystream_t *stream, const uint8_t *buffer, size_t msglen, size_t fail_after)
- {
- memset(stream, 0, sizeof(*stream));
- stream->stream.callback = flakystream_callback;
- stream->stream.bytes_left = SIZE_MAX;
- stream->stream.state = stream;
- stream->buffer = buffer;
- stream->position = 0;
- stream->msglen = msglen;
- stream->fail_after = fail_after;
- }
|