3 uintmax_t decode_varint(const unsigned char **bufp
)
5 const unsigned char *buf
= *bufp
;
6 unsigned char c
= *buf
++;
7 uintmax_t val
= c
& 127;
10 if (!val
|| MSB(val
, 7))
11 return 0; /* overflow */
13 val
= (val
<< 7) + (c
& 127);
19 int encode_varint(uintmax_t value
, unsigned char *buf
)
21 unsigned char varint
[16];
22 unsigned pos
= sizeof(varint
) - 1;
23 varint
[pos
] = value
& 127;
25 varint
[--pos
] = 128 | (--value
& 127);
27 memcpy(buf
, varint
+ pos
, sizeof(varint
) - pos
);
28 return sizeof(varint
) - pos
;