X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=tests%2Ftest_decode_callbacks.c;h=95824d1a6f8ec139b558cffc15dc438899d49b68;hb=5f3bf35e01a0eb5d7c31949bcd32265be056ed5c;hp=1c8d43a5c7041c7195a11cad540f3440942ed24b;hpb=d4abb63c052dc9d4c23ce72e498b4c7483f3b7cb;p=apps%2Fagl-service-can-low-level.git diff --git a/tests/test_decode_callbacks.c b/tests/test_decode_callbacks.c index 1c8d43a5..95824d1a 100644 --- a/tests/test_decode_callbacks.c +++ b/tests/test_decode_callbacks.c @@ -8,17 +8,49 @@ bool print_string(pb_istream_t *stream, const pb_field_t *field, void *arg) { - uint8_t buffer[1024]; + uint8_t buffer[1024] = {0}; /* We could read block-by-block to avoid the large buffer... */ - if (stream->bytes_left > sizeof(buffer)) + if (stream->bytes_left > sizeof(buffer) - 1) return false; if (!pb_read(stream, buffer, stream->bytes_left)) return false; - /* Print the string, in format comparable with protoc --decode. */ - printf("%s: \"%s\"\n", (char*)arg, buffer); + /* Print the string, in format comparable with protoc --decode. + * Format comes from the arg defined in main(). + */ + printf((char*)arg, buffer); + return true; +} + +bool print_int32(pb_istream_t *stream, const pb_field_t *field, void *arg) +{ + uint64_t value; + if (!pb_decode_varint(stream, &value)) + return false; + + printf((char*)arg, (long)value); + return true; +} + +bool print_fixed32(pb_istream_t *stream, const pb_field_t *field, void *arg) +{ + uint32_t value; + if (!pb_decode_fixed32(stream, &value)) + return false; + + printf((char*)arg, (long)value); + return true; +} + +bool print_fixed64(pb_istream_t *stream, const pb_field_t *field, void *arg) +{ + uint64_t value; + if (!pb_decode_fixed64(stream, &value)) + return false; + + printf((char*)arg, (long long)value); return true; } @@ -34,11 +66,26 @@ int main() */ TestMessage testmessage = {}; + testmessage.submsg.stringvalue.funcs.decode = &print_string; + testmessage.submsg.stringvalue.arg = "submsg {\n stringvalue: \"%s\"\n"; + testmessage.submsg.int32value.funcs.decode = &print_int32; + testmessage.submsg.int32value.arg = " int32value: %ld\n"; + testmessage.submsg.fixed32value.funcs.decode = &print_fixed32; + testmessage.submsg.fixed32value.arg = " fixed32value: %ld\n"; + testmessage.submsg.fixed64value.funcs.decode = &print_fixed64; + testmessage.submsg.fixed64value.arg = " fixed64value: %lld\n}\n"; + testmessage.stringvalue.funcs.decode = &print_string; - testmessage.stringvalue.arg = "stringvalue"; + testmessage.stringvalue.arg = "stringvalue: \"%s\"\n"; + testmessage.int32value.funcs.decode = &print_int32; + testmessage.int32value.arg = "int32value: %ld\n"; + testmessage.fixed32value.funcs.decode = &print_fixed32; + testmessage.fixed32value.arg = "fixed32value: %ld\n"; + testmessage.fixed64value.funcs.decode = &print_fixed64; + testmessage.fixed64value.arg = "fixed64value: %lld\n"; if (!pb_decode(&stream, TestMessage_fields, &testmessage)) return 1; return 0; -} \ No newline at end of file +}