summaryrefslogtreecommitdiff
path: root/stream/upb_decoder.c
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2011-02-06 08:21:47 -0800
committerJoshua Haberman <joshua@reverberate.org>2011-02-06 08:21:47 -0800
commit4667ed4be921b2142321e47c8ccc6a35a9189277 (patch)
tree416d9bf9cffa3b9abc99f7f69a68e84df8f0a203 /stream/upb_decoder.c
parent806ba1c80d86bd59759cf59efc057662eecbcf65 (diff)
All tests pass again, valgrind-clean! Next up: benchmarks.
Diffstat (limited to 'stream/upb_decoder.c')
-rw-r--r--stream/upb_decoder.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/stream/upb_decoder.c b/stream/upb_decoder.c
index b85abb9..588d553 100644
--- a/stream/upb_decoder.c
+++ b/stream/upb_decoder.c
@@ -26,11 +26,12 @@ INLINE bool upb_decode_varint_fast(const char **ptr, uint64_t *val,
b = *(p++); low |= (b & 0x7f) << 14; if(!(b & 0x80)) goto done;
b = *(p++); low |= (b & 0x7f) << 21; if(!(b & 0x80)) goto done;
b = *(p++); low |= (b & 0x7f) << 28;
- high = (b & 0x7f) >> 3; if(!(b & 0x80)) goto done;
- b = *(p++); high |= (b & 0x7f) << 4; if(!(b & 0x80)) goto done;
- b = *(p++); high |= (b & 0x7f) << 11; if(!(b & 0x80)) goto done;
- b = *(p++); high |= (b & 0x7f) << 18; if(!(b & 0x80)) goto done;
- b = *(p++); high |= (b & 0x7f) << 25; if(!(b & 0x80)) goto done;
+ high = (b & 0x7f) >> 4; if(!(b & 0x80)) goto done;
+ b = *(p++); high |= (b & 0x7f) << 3; if(!(b & 0x80)) goto done;
+ b = *(p++); high |= (b & 0x7f) << 10; if(!(b & 0x80)) goto done;
+ b = *(p++); high |= (b & 0x7f) << 17; if(!(b & 0x80)) goto done;
+ b = *(p++); high |= (b & 0x7f) << 24; if(!(b & 0x80)) goto done;
+ b = *(p++); high |= (b & 0x7f) << 31; if(!(b & 0x80)) goto done;
upb_seterr(status, UPB_ERROR, "Unterminated varint");
return false;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback