Initial import

This commit is contained in:
Justine Tunney
2020-06-15 07:18:57 -07:00
commit c91b3c5006
14915 changed files with 590219 additions and 0 deletions

29
libc/leb128.h Normal file
View File

@@ -0,0 +1,29 @@
#ifndef COSMOPOLITAN_LIBC_LEB128_H_
#define COSMOPOLITAN_LIBC_LEB128_H_
#if !(__ASSEMBLER__ + __LINKER__ + 0)
/**
* Decodes a GNU-style varint from a buffer.
*
* The GNU Assembler is able to encode numbers this way, since it's used
* by the DWARF debug format.
*/
forceinline int unsleb128(const void *buf, size_t size, int64_t *out) {
const unsigned char *p = (const unsigned char *)buf;
const unsigned char *pe = (const unsigned char *)buf + size;
int64_t res = 0;
int bits = 0;
unsigned char c;
do {
if (size && p == pe) return -1;
c = *p++;
res |= (int64_t)(c & 0x7f) << bits;
bits += 7;
} while (c & 0x80);
if ((c & 0x40) != 0) res |= -1ULL << bits;
if (out) *out = res;
return p - (const unsigned char *)buf;
}
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_LEB128_H_ */