diff options
author | Josh Haberman <jhaberman@gmail.com> | 2015-07-30 14:54:03 -0700 |
---|---|---|
committer | Josh Haberman <jhaberman@gmail.com> | 2015-07-30 14:54:03 -0700 |
commit | abcb6428ad9bf7d650455a0a180647a05183fd9d (patch) | |
tree | 0408268278840d8954ef3d0c6d18c8ba16524817 /upb/pb/decoder.int.h | |
parent | ecaf82d13401bf4d8ae3fd7e099a11c94d554555 (diff) |
Changed parser semantics around skipping.
Prior to this change:
parse(buf, len) -> len + N
...would indicate that the next N bytes of the input are not
needed, *and* would advance the decoding position by this
much.
After this change:
parse(buf, len) -> len + N
parse(NULL, N) -> N
...can be used to achieve the same thing. But skipping the
N bytes is not explicitly performed by the user. A user that
doesn't want/need to skip can just say:
parsed = parse(buf, len);
if (parsed < len) {
// Handle suspend, advance stream by "parsed".
} else {
// Stream was advanced by "len" (even if parsed > len).
}
Updated unit tests to test this new behavior, and refactored
test utility code a bit to support it.
Diffstat (limited to 'upb/pb/decoder.int.h')
-rw-r--r-- | upb/pb/decoder.int.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/upb/pb/decoder.int.h b/upb/pb/decoder.int.h index 2d4485a..be5d044 100644 --- a/upb/pb/decoder.int.h +++ b/upb/pb/decoder.int.h @@ -225,6 +225,12 @@ struct upb_pbdecoder { char residual[12]; char *residual_end; + /* Bytes of data that should be discarded from the input beore we start + * parsing again. We set this when we internally determine that we can + * safely skip the next N bytes, but this region extends past the current + * user buffer. */ + size_t skip; + /* Stores the user buffer passed to our decode function. */ const char *buf_param; size_t size_param; |