summaryrefslogtreecommitdiffstats
path: root/tests/test_decode1.c
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-11 19:22:36 +0000
committerPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-11 19:22:36 +0000
commit6dfba365b00175eae7e8b83aaf5d29ce190fd9eb (patch)
treef7908f61cb8606a281aa709d187f3b8329385821 /tests/test_decode1.c
parent09f92bafa59460ea4597c557e469e982386c9e3b (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.c24
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");