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/sink.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/sink.h')
-rw-r--r-- | upb/sink.h | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -272,7 +272,7 @@ UPB_INLINE bool upb_bufsrc_putbuf(const char *buf, size_t len, upb_bufhandle_setbuf(&handle, buf, 0); ret = upb_bytessink_start(sink, len, &subc); if (ret && len != 0) { - ret = (upb_bytessink_putbuf(sink, subc, buf, len, &handle) == len); + ret = (upb_bytessink_putbuf(sink, subc, buf, len, &handle) >= len); } if (ret) { ret = upb_bytessink_end(sink); |