X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=pb_decode.h;h=a426bdd70dc864b15fd9f84c5f9d4a9406fddff2;hb=90c7269b634845a6318a7969a600d800aae70e1d;hp=98a64cc0baf9895767622a098a68bf4741f30830;hpb=5b9ad17dc2014d7506a7dde92281d8c36a1433e4;p=apps%2Fagl-service-can-low-level.git diff --git a/pb_decode.h b/pb_decode.h index 98a64cc0..a426bdd7 100644 --- a/pb_decode.h +++ b/pb_decode.h @@ -3,8 +3,8 @@ * field descriptions created by nanopb_generator.py. */ -#ifndef _PB_DECODE_H_ -#define _PB_DECODE_H_ +#ifndef PB_DECODE_H_INCLUDED +#define PB_DECODE_H_INCLUDED #include "pb.h" @@ -25,7 +25,7 @@ extern "C" { * is different than from the main stream. Don't use bytes_left to compute * any pointers. */ -struct _pb_istream_t +struct pb_istream_s { #ifdef PB_BUFFER_ONLY /* Callback pointer is not used in buffer-only configuration. @@ -34,7 +34,7 @@ struct _pb_istream_t */ int *callback; #else - bool (*callback)(pb_istream_t *stream, uint8_t *buf, size_t count); + bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count); #endif void *state; /* Free field for use by callback implementation */ @@ -73,6 +73,9 @@ bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struc * * This can also be used for 'merging' two messages, i.e. update only the * fields that exist in the new message. + * + * Note: If this function returns with an error, it will not release any + * dynamically allocated fields. You will need to call pb_release() yourself. */ bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); @@ -82,6 +85,14 @@ bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *des */ bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); +#ifdef PB_ENABLE_MALLOC +/* Release any allocated pointer fields. If you use dynamic allocation, you should + * call this for any successfully decoded message when you are done with it. If + * pb_decode() returns with an error, the message is already released. + */ +void pb_release(const pb_field_t fields[], void *dest_struct); +#endif + /************************************** * Functions for manipulating streams * @@ -92,12 +103,12 @@ bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void * * Alternatively, you can use a custom stream that reads directly from e.g. * a file or a network socket. */ -pb_istream_t pb_istream_from_buffer(uint8_t *buf, size_t bufsize); +pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize); /* Function to read from a pb_istream_t. You can use this if you need to * read some custom header data, or to read data in field callbacks. */ -bool pb_read(pb_istream_t *stream, uint8_t *buf, size_t count); +bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); /************************************************ @@ -115,6 +126,10 @@ bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type); * int64, uint32 and uint64 field types. */ bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest); +/* Decode an integer in the varint format. This works for bool, enum, int32, + * and uint32 field types. */ +bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest); + /* Decode an integer in the zig-zagged svarint format. This works for sint32 * and sint64. */ bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest); @@ -129,26 +144,7 @@ bool pb_decode_fixed64(pb_istream_t *stream, void *dest); /* Make a limited-length substream for reading a PB_WT_STRING field. */ bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream); -void pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); - - -/******************************* - * Internal / legacy functions * - *******************************/ - -#ifdef NANOPB_INTERNALS -bool pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest); -bool pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -bool pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest); -bool pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest); - -bool pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -bool pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest); -bool pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest); - -bool pb_skip_varint(pb_istream_t *stream); -bool pb_skip_string(pb_istream_t *stream); -#endif +bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); #ifdef __cplusplus } /* extern "C" */