diff --git a/README.md b/README.md index 2b00b5ab4..793536229 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ + + # Cosmopolitan [Cosmopolitan Libc](https://justine.lol/cosmopolitan/index.html) makes C diff --git a/libc/intrin/asan.c b/libc/intrin/asan.c index 70dbdd877..3d029d2dd 100644 --- a/libc/intrin/asan.c +++ b/libc/intrin/asan.c @@ -321,7 +321,7 @@ static size_t __asan_int2str(int64_t i, char *a) { return 1 + __asan_uint2str(-i, a); } -flattenout void __asan_poison(uintptr_t p, size_t n, int kind) { +void __asan_poison(uintptr_t p, size_t n, int kind) { int k; char *s; if (!n) return; @@ -343,7 +343,7 @@ flattenout void __asan_poison(uintptr_t p, size_t n, int kind) { } } -flattenout void __asan_unpoison(uintptr_t p, size_t n) { +void __asan_unpoison(uintptr_t p, size_t n) { int k; char *s; if (!n) return; diff --git a/libc/str/decodentsutf16.c b/libc/str/decodentsutf16.c deleted file mode 100644 index b0ff37546..000000000 --- a/libc/str/decodentsutf16.c +++ /dev/null @@ -1,41 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/str/str.h" -#include "libc/str/utf16.h" - -/** - * Helps runtime decode UTF-16 with slightly smaller code size. - */ -wint_t DecodeNtsUtf16(const char16_t **s) { - wint_t x, y; - for (;;) { - if (!(x = *(*s)++)) break; - if (IsUtf16Cont(x)) continue; - if (IsUcs2(x)) { - return x; - } else { - if ((y = *(*s)++)) { - return MergeUtf16(x, y); - } else { - return 0; - } - } - } - return x; -} diff --git a/libc/str/undeflate.c b/libc/str/undeflate.c index 9c7523159..b79ed1e5a 100644 --- a/libc/str/undeflate.c +++ b/libc/str/undeflate.c @@ -69,8 +69,8 @@ static const struct DeflateConsts { {{144, 8}, {112, 9}, {24, 7}, {8, 8}, {32, 5}, {0, 0}}, }; -static noasan uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree, - const uint8_t *lens, size_t symcount) { +static uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree, + const uint8_t *lens, size_t symcount) { size_t i, len; uint32_t code, slot; uint16_t codes[16], first[16], counts[16]; @@ -96,10 +96,10 @@ static noasan uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree, return first[15]; } -static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold, - const uint32_t *tree, - size_t treecount, - uint32_t *out_symbol) { +static struct DeflateHold undeflatesymbol(struct DeflateHold hold, + const uint32_t *tree, + size_t treecount, + uint32_t *out_symbol) { size_t left, right, m; uint32_t search, key; left = 0; @@ -122,8 +122,6 @@ static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold, return hold; } -/* TODO(jart): Do we really need noasan? */ - /** * Decompresses raw DEFLATE data. * @@ -134,8 +132,8 @@ static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold, * are part of the design of this algorithm * @note h/t Phil Katz, David Huffman, Claude Shannon */ -noasan ssize_t undeflate(void *output, size_t outputsize, void *input, - size_t inputsize, struct DeflateState *ds) { +ssize_t undeflate(void *output, size_t outputsize, void *input, + size_t inputsize, struct DeflateState *ds) { struct DeflateHold hold; bool isfinalblock; size_t i, nlit, ndist; diff --git a/tool/build/blinkenlights.c b/tool/build/blinkenlights.c index 0e14cd992..82be8de2f 100644 --- a/tool/build/blinkenlights.c +++ b/tool/build/blinkenlights.c @@ -50,6 +50,7 @@ #include "libc/str/str.h" #include "libc/str/thompike.h" #include "libc/str/tpdecode.internal.h" +#include "libc/str/tpenc.h" #include "libc/str/tpencode.internal.h" #include "libc/sysv/consts/auxv.h" #include "libc/sysv/consts/ex.h" @@ -1957,12 +1958,16 @@ static int GetVidyaByte(unsigned char b) { } static void OnVidyaServiceWriteCharacter(void) { + uint64_t w; int i, n, y, x; char *p, buf[32]; p = buf; p += FormatCga(m->bx[0], p); p = stpcpy(p, "\e7"); - p += tpencode(p, 8, GetVidyaByte(m->ax[0]), false); + w = tpenc(GetVidyaByte(m->ax[0])); + do { + *p++ = w; + } while ((w >>= 8)); p = stpcpy(p, "\e8"); for (i = Read16(m->cx); i--;) { PtyWrite(pty, buf, p - buf); @@ -1984,9 +1989,13 @@ static char16_t VidyaServiceXlatTeletype(uint8_t c) { static void OnVidyaServiceTeletypeOutput(void) { int n; + uint64_t w; char buf[12]; n = FormatCga(m->bx[0], buf); - n += tpencode(buf + n, 6, VidyaServiceXlatTeletype(m->ax[0]), false); + w = tpenc(VidyaServiceXlatTeletype(m->ax[0])); + do { + buf[n++] = w; + } while ((w >>= 8)); PtyWrite(pty, buf, n); } diff --git a/tool/build/lib/dis.c b/tool/build/lib/dis.c index 91c01244b..24b008cbb 100644 --- a/tool/build/lib/dis.c +++ b/tool/build/lib/dis.c @@ -28,7 +28,7 @@ #include "libc/mem/mem.h" #include "libc/runtime/runtime.h" #include "libc/str/str.h" -#include "libc/str/tpencode.internal.h" +#include "libc/str/tpenc.h" #include "third_party/xed/x86.h" #include "tool/build/lib/case.h" #include "tool/build/lib/demangle.h" @@ -134,12 +134,18 @@ static char *DisLineCode(struct Dis *d, char *p) { static char *DisLineData(struct Dis *d, char *p, const uint8_t *b, size_t n) { size_t i; + uint64_t w; p = DisColumn(DisAddr(d, p), p, ADDRLEN); p = DisColumn(DisByte(p, b, n), p, 64); p = HighStart(p, g_high.comment); *p++ = '#'; *p++ = ' '; - for (i = 0; i < n; ++i) p += tpencode(p, 8, bing(b[i], 0), false); + for (i = 0; i < n; ++i) { + w = tpenc(bing(b[i], 0)); + do { + *p++ = w; + } while ((w >>= 8)); + } p = HighEnd(p); *p = '\0'; return p; diff --git a/tool/build/lib/loader.c b/tool/build/lib/loader.c index e1d5ddce7..ed3313bdb 100644 --- a/tool/build/lib/loader.c +++ b/tool/build/lib/loader.c @@ -140,7 +140,7 @@ void LoadProgram(struct Machine *m, const char *prog, char **args, char **vars, size_t i, mappedsize; DCHECK_NOTNULL(prog); elf->prog = prog; - if ((fd = open(prog, O_RDONLY)) == -1 || + if ((fd = open(prog, O_RDWR)) == -1 || (fstat(fd, &st) == -1 || !st.st_size)) { fputs(prog, stderr); fputs(": not found\n", stderr); diff --git a/usr/share/img/honeybadger.png b/usr/share/img/honeybadger.png new file mode 100644 index 000000000..6f9d154fa Binary files /dev/null and b/usr/share/img/honeybadger.png differ