diff options
Diffstat (limited to 'src/pack.c')
| -rw-r--r-- | src/pack.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pack.c b/src/pack.c new file mode 100644 index 0000000..f7be2c8 --- /dev/null +++ b/src/pack.c @@ -0,0 +1,35 @@ +#include <stdio.h> + +int readint(unsigned char **cp) +{ + int result = 0; + int len = 1; + + unsigned char src = **cp; + + (*cp)++; + int sign = (src >> 6) & 1; + + result |= (src & 0b00111111); + for (int i = 0; i < 4; i++) + { + // printf("(%d, ", src); + if ((src & 0b10000000) == 0) + break; + + src = **cp; + (*cp)++; + len++; + + if (i == 3 && (src & 0b11110000) != 0) + printf("[ WARNING ] Non zero int padding!\n"); + + result |= (src & 0b01111111) << (6 + 7 * i); + } + if (len > 1 && src == 0b00000000) + printf("[ WARNING ] Overlong int encoding!\n"); + + result ^= -sign; + + return result; +} |
