File: flakystream.c

package info (click to toggle)
nanopb 0.4.9.1-1
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,676 kB
  • sloc: ansic: 12,144; python: 2,795; cpp: 190; sh: 163; makefile: 85
file content (33 lines) | stat: -rw-r--r-- 906 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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;
}