Coverage Report

Created: 2024-09-08 06:23

/src/git/varint.c
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
}