diff options
author | Petteri Aimonen <jpa@npb.mail.kapsi.fi> | 2011-08-11 19:22:36 +0000 |
---|---|---|
committer | Petteri Aimonen <jpa@npb.mail.kapsi.fi> | 2011-08-11 19:22:36 +0000 |
commit | 6dfba365b00175eae7e8b83aaf5d29ce190fd9eb (patch) | |
tree | f7908f61cb8606a281aa709d187f3b8329385821 /tests/test_decode1.c | |
parent | 09f92bafa59460ea4597c557e469e982386c9e3b (diff) |
Documenting and improving stream behaviour
git-svn-id: https://svn.kapsi.fi/jpa/nanopb@954 e3a754e5-d11d-0410-8d38-ebb782a927b9
Diffstat (limited to 'tests/test_decode1.c')
-rw-r--r-- | tests/test_decode1.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/tests/test_decode1.c b/tests/test_decode1.c index cc4688dc..a2c7f428 100644 --- a/tests/test_decode1.c +++ b/tests/test_decode1.c @@ -24,12 +24,28 @@ bool print_person(pb_istream_t *stream) return true; } -int main() +bool callback(pb_istream_t *stream, uint8_t *buf, size_t count) { - uint8_t buffer[512]; - size_t size = fread(buffer, 1, 512, stdin); + FILE *file = (FILE*)stream->state; + bool status; + + if (buf == NULL) + { + while (count-- && fgetc(file) != EOF); + return count == 0; + } + + status = (fread(buf, 1, count, file) == count); - pb_istream_t stream = pb_istream_from_buffer(buffer, size); + if (feof(file)) + stream->bytes_left = 0; + + return status; +} + +int main() +{ + pb_istream_t stream = {&callback, stdin, SIZE_MAX}; if (!print_person(&stream)) printf("Parsing failed.\n"); |