X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest_decode1.c;h=56bbd8f880987409ee78cab3eb5481600f5749fb;hb=d7f3a74388b4825d2c980c53d0a740ddfd0e4770;hp=3f02745e058571007db219967c311e40b97e1e34;hpb=d96e9575d4eb188bf84134c25cfa515b2949dbd7;p=apps%2Fagl-service-can-low-level.git diff --git a/tests/test_decode1.c b/tests/test_decode1.c index 3f02745e..56bbd8f8 100644 --- a/tests/test_decode1.c +++ b/tests/test_decode1.c @@ -23,7 +23,7 @@ bool print_person(pb_istream_t *stream) /* Now the decoding is done, rest is just to print stuff out. */ printf("name: \"%s\"\n", person.name); - printf("id: %d\n", person.id); + printf("id: %ld\n", (long)person.id); if (person.has_email) printf("email: \"%s\"\n", person.email); @@ -34,19 +34,22 @@ bool print_person(pb_istream_t *stream) printf("phone {\n"); printf(" number: \"%s\"\n", phone->number); - switch (phone->type) + if (phone->has_type) { - case Person_PhoneType_WORK: - printf(" type: WORK\n"); - break; - - case Person_PhoneType_HOME: - printf(" type: HOME\n"); - break; - - case Person_PhoneType_MOBILE: - printf(" type: MOBILE\n"); - break; + switch (phone->type) + { + case Person_PhoneType_WORK: + printf(" type: WORK\n"); + break; + + case Person_PhoneType_HOME: + printf(" type: HOME\n"); + break; + + case Person_PhoneType_MOBILE: + printf(" type: MOBILE\n"); + break; + } } printf("}\n"); } @@ -54,36 +57,25 @@ bool print_person(pb_istream_t *stream) return true; } -/* This binds the pb_istream_t to stdin */ -bool callback(pb_istream_t *stream, uint8_t *buf, size_t count) +int main() { - FILE *file = (FILE*)stream->state; - bool status; + /* Read the data into buffer */ + uint8_t buffer[512]; + size_t count = fread(buffer, 1, sizeof(buffer), stdin); - if (buf == NULL) + if (!feof(stdin)) { - /* Skipping data */ - while (count-- && fgetc(file) != EOF); - return count == 0; + printf("Message does not fit in buffer\n"); + return 1; } - status = (fread(buf, 1, count, file) == count); - - if (feof(file)) - stream->bytes_left = 0; + /* Construct a pb_istream_t for reading from the buffer */ + pb_istream_t stream = pb_istream_from_buffer(buffer, count); - return status; -} - -int main() -{ - /* Maximum size is specified to prevent infinite length messages from - * hanging this in the fuzz test. - */ - pb_istream_t stream = {&callback, stdin, 10000}; + /* Decode and print out the stuff */ if (!print_person(&stream)) { - printf("Parsing failed.\n"); + printf("Parsing failed: %s\n", PB_GET_ERROR(&stream)); return 1; } else { return 0;