Line | Count | Source (jump to first uncovered line) |
1 | | #include "git-compat-util.h" |
2 | | #include "varint.h" |
3 | | |
4 | | uintmax_t decode_varint(const unsigned char **bufp) |
5 | 0 | { |
6 | 0 | const unsigned char *buf = *bufp; |
7 | 0 | unsigned char c = *buf++; |
8 | 0 | uintmax_t val = c & 127; |
9 | 0 | while (c & 128) { |
10 | 0 | val += 1; |
11 | 0 | if (!val || MSB(val, 7)) |
12 | 0 | return 0; /* overflow */ |
13 | 0 | c = *buf++; |
14 | 0 | val = (val << 7) + (c & 127); |
15 | 0 | } |
16 | 0 | *bufp = buf; |
17 | 0 | return val; |
18 | 0 | } |
19 | | |
20 | | int encode_varint(uintmax_t value, unsigned char *buf) |
21 | 0 | { |
22 | 0 | unsigned char varint[16]; |
23 | 0 | unsigned pos = sizeof(varint) - 1; |
24 | 0 | varint[pos] = value & 127; |
25 | 0 | while (value >>= 7) |
26 | 0 | varint[--pos] = 128 | (--value & 127); |
27 | 0 | if (buf) |
28 | 0 | memcpy(buf, varint + pos, sizeof(varint) - pos); |
29 | 0 | return sizeof(varint) - pos; |
30 | 0 | } |