Move the declarations of _pb_ostream_t and _pb_istream_t before first use.
Otherwise Microsoft Visual C++ threats them as C++ classes instead of plain structs, forbidding use in C linkage functions. Thanks to Markus Schwarzenberg for the patch. Update issue 84 Status: Started
This commit is contained in:
66
pb_decode.h
66
pb_decode.h
@@ -12,6 +12,39 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Structure for defining custom input streams. You will need to provide
|
||||||
|
* a callback function to read the bytes from your storage, which can be
|
||||||
|
* for example a file or a network socket.
|
||||||
|
*
|
||||||
|
* The callback must conform to these rules:
|
||||||
|
*
|
||||||
|
* 1) Return false on IO errors. This will cause decoding to abort.
|
||||||
|
* 2) You can use state to store your own data (e.g. buffer pointer),
|
||||||
|
* and rely on pb_read to verify that no-body reads past bytes_left.
|
||||||
|
* 3) Your callback may be used with substreams, in which case bytes_left
|
||||||
|
* is different than from the main stream. Don't use bytes_left to compute
|
||||||
|
* any pointers.
|
||||||
|
*/
|
||||||
|
struct _pb_istream_t
|
||||||
|
{
|
||||||
|
#ifdef PB_BUFFER_ONLY
|
||||||
|
/* Callback pointer is not used in buffer-only configuration.
|
||||||
|
* Having an int pointer here allows binary compatibility but
|
||||||
|
* gives an error if someone tries to assign callback function.
|
||||||
|
*/
|
||||||
|
int *callback;
|
||||||
|
#else
|
||||||
|
bool (*callback)(pb_istream_t *stream, uint8_t *buf, size_t count);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *state; /* Free field for use by callback implementation */
|
||||||
|
size_t bytes_left;
|
||||||
|
|
||||||
|
#ifndef PB_NO_ERRMSG
|
||||||
|
const char *errmsg;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
* Main decoding functions *
|
* Main decoding functions *
|
||||||
***************************/
|
***************************/
|
||||||
@@ -66,39 +99,6 @@ pb_istream_t pb_istream_from_buffer(uint8_t *buf, size_t bufsize);
|
|||||||
*/
|
*/
|
||||||
bool pb_read(pb_istream_t *stream, uint8_t *buf, size_t count);
|
bool pb_read(pb_istream_t *stream, uint8_t *buf, size_t count);
|
||||||
|
|
||||||
/* Structure for defining custom input streams. You will need to provide
|
|
||||||
* a callback function to read the bytes from your storage, which can be
|
|
||||||
* for example a file or a network socket.
|
|
||||||
*
|
|
||||||
* The callback must conform to these rules:
|
|
||||||
*
|
|
||||||
* 1) Return false on IO errors. This will cause decoding to abort.
|
|
||||||
* 2) You can use state to store your own data (e.g. buffer pointer),
|
|
||||||
* and rely on pb_read to verify that no-body reads past bytes_left.
|
|
||||||
* 3) Your callback may be used with substreams, in which case bytes_left
|
|
||||||
* is different than from the main stream. Don't use bytes_left to compute
|
|
||||||
* any pointers.
|
|
||||||
*/
|
|
||||||
struct _pb_istream_t
|
|
||||||
{
|
|
||||||
#ifdef PB_BUFFER_ONLY
|
|
||||||
/* Callback pointer is not used in buffer-only configuration.
|
|
||||||
* Having an int pointer here allows binary compatibility but
|
|
||||||
* gives an error if someone tries to assign callback function.
|
|
||||||
*/
|
|
||||||
int *callback;
|
|
||||||
#else
|
|
||||||
bool (*callback)(pb_istream_t *stream, uint8_t *buf, size_t count);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void *state; /* Free field for use by callback implementation */
|
|
||||||
size_t bytes_left;
|
|
||||||
|
|
||||||
#ifndef PB_NO_ERRMSG
|
|
||||||
const char *errmsg;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************
|
/************************************************
|
||||||
* Helper functions for writing field callbacks *
|
* Helper functions for writing field callbacks *
|
||||||
|
|||||||
68
pb_encode.h
68
pb_encode.h
@@ -12,6 +12,40 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Structure for defining custom output streams. You will need to provide
|
||||||
|
* a callback function to write the bytes to your storage, which can be
|
||||||
|
* for example a file or a network socket.
|
||||||
|
*
|
||||||
|
* The callback must conform to these rules:
|
||||||
|
*
|
||||||
|
* 1) Return false on IO errors. This will cause encoding to abort.
|
||||||
|
* 2) You can use state to store your own data (e.g. buffer pointer).
|
||||||
|
* 3) pb_write will update bytes_written after your callback runs.
|
||||||
|
* 4) Substreams will modify max_size and bytes_written. Don't use them
|
||||||
|
* to calculate any pointers.
|
||||||
|
*/
|
||||||
|
struct _pb_ostream_t
|
||||||
|
{
|
||||||
|
#ifdef PB_BUFFER_ONLY
|
||||||
|
/* Callback pointer is not used in buffer-only configuration.
|
||||||
|
* Having an int pointer here allows binary compatibility but
|
||||||
|
* gives an error if someone tries to assign callback function.
|
||||||
|
* Also, NULL pointer marks a 'sizing stream' that does not
|
||||||
|
* write anything.
|
||||||
|
*/
|
||||||
|
int *callback;
|
||||||
|
#else
|
||||||
|
bool (*callback)(pb_ostream_t *stream, const uint8_t *buf, size_t count);
|
||||||
|
#endif
|
||||||
|
void *state; /* Free field for use by callback implementation. */
|
||||||
|
size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */
|
||||||
|
size_t bytes_written; /* Number of bytes written so far. */
|
||||||
|
|
||||||
|
#ifndef PB_NO_ERRMSG
|
||||||
|
const char *errmsg;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
* Main encoding functions *
|
* Main encoding functions *
|
||||||
***************************/
|
***************************/
|
||||||
@@ -70,40 +104,6 @@ pb_ostream_t pb_ostream_from_buffer(uint8_t *buf, size_t bufsize);
|
|||||||
*/
|
*/
|
||||||
bool pb_write(pb_ostream_t *stream, const uint8_t *buf, size_t count);
|
bool pb_write(pb_ostream_t *stream, const uint8_t *buf, size_t count);
|
||||||
|
|
||||||
/* Structure for defining custom output streams. You will need to provide
|
|
||||||
* a callback function to write the bytes to your storage, which can be
|
|
||||||
* for example a file or a network socket.
|
|
||||||
*
|
|
||||||
* The callback must conform to these rules:
|
|
||||||
*
|
|
||||||
* 1) Return false on IO errors. This will cause encoding to abort.
|
|
||||||
* 2) You can use state to store your own data (e.g. buffer pointer).
|
|
||||||
* 3) pb_write will update bytes_written after your callback runs.
|
|
||||||
* 4) Substreams will modify max_size and bytes_written. Don't use them
|
|
||||||
* to calculate any pointers.
|
|
||||||
*/
|
|
||||||
struct _pb_ostream_t
|
|
||||||
{
|
|
||||||
#ifdef PB_BUFFER_ONLY
|
|
||||||
/* Callback pointer is not used in buffer-only configuration.
|
|
||||||
* Having an int pointer here allows binary compatibility but
|
|
||||||
* gives an error if someone tries to assign callback function.
|
|
||||||
* Also, NULL pointer marks a 'sizing stream' that does not
|
|
||||||
* write anything.
|
|
||||||
*/
|
|
||||||
int *callback;
|
|
||||||
#else
|
|
||||||
bool (*callback)(pb_ostream_t *stream, const uint8_t *buf, size_t count);
|
|
||||||
#endif
|
|
||||||
void *state; /* Free field for use by callback implementation. */
|
|
||||||
size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */
|
|
||||||
size_t bytes_written; /* Number of bytes written so far. */
|
|
||||||
|
|
||||||
#ifndef PB_NO_ERRMSG
|
|
||||||
const char *errmsg;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************
|
/************************************************
|
||||||
* Helper functions for writing field callbacks *
|
* Helper functions for writing field callbacks *
|
||||||
|
|||||||
Reference in New Issue
Block a user