summaryrefslogtreecommitdiff
path: root/src/varint.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/varint.zig')
-rw-r--r--src/varint.zig8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/varint.zig b/src/varint.zig
index 45207cf..3a07442 100644
--- a/src/varint.zig
+++ b/src/varint.zig
@@ -6,8 +6,12 @@ pub fn parse(data: []const u8) struct { value: u64, len: usize } {
while (i < data.len and i < 9) : (i += 1) {
const byte = data[i];
- result |= @as(u64, byte & 0x7f) << @as(u6, @intCast(i * 7));
- if ((byte & 0x80) == 0) return .{ .value = result, .len = i + 1 };
+ if ((byte & 0x80) != 0) {
+ result = (result << 7) | @as(u64, byte & 0x7f);
+ } else {
+ result = (result << 7) | @as(u64, byte);
+ return .{ .value = result, .len = i + 1 };
+ }
}
return .{ .value = result, .len = i };