mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-27 04:50:28 +00:00
Make numerous improvements
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
This commit is contained in:
parent
fa7b4f5bd1
commit
39bf41f4eb
806 changed files with 77494 additions and 63859 deletions
57
libc/x/utf16to32.c
Normal file
57
libc/x/utf16to32.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*-*- 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 2021 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/mem/mem.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/str/utf16.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
/**
|
||||
* Transcodes UTF-16 to UTF-32.
|
||||
*
|
||||
* @param p is input value
|
||||
* @param n if -1 implies strlen
|
||||
* @param z if non-NULL receives output length
|
||||
*/
|
||||
wchar_t *utf16to32(const char16_t *p, size_t n, size_t *z) {
|
||||
wint_t x, y;
|
||||
wchar_t *r, *q;
|
||||
unsigned m, j, w;
|
||||
const char16_t *e;
|
||||
int16_t v1[8], v2[8], v3[8], vz[8];
|
||||
if (z) *z = 0;
|
||||
if (n == -1) n = p ? strlen16(p) : 0;
|
||||
if ((q = r = malloc(n * 4 + 8 + 1))) {
|
||||
for (e = p + n; p < e;) {
|
||||
x = *p++ & 0xffff;
|
||||
if (!IsUcs2(x)) {
|
||||
if (p < e) {
|
||||
y = *p++ & 0xffff;
|
||||
x = MergeUtf16(x, y);
|
||||
} else {
|
||||
x = 0xFFFD;
|
||||
}
|
||||
}
|
||||
*q++ = x;
|
||||
}
|
||||
if (z) *z = q - r;
|
||||
*q++ = '\0';
|
||||
if ((q = realloc(r, (q - r) * sizeof(*r)))) r = q;
|
||||
}
|
||||
return r;
|
||||
}
|
|
@ -52,7 +52,7 @@ char *utf16toutf8(const char16_t *p, size_t n, size_t *z) {
|
|||
if ((q = r = malloc(n * 4 + 8 + 1))) {
|
||||
for (e = p + n; p < e;) {
|
||||
if (p + 8 < e) { /* 17x ascii */
|
||||
memset(vz, 0, 16);
|
||||
bzero(vz, 16);
|
||||
do {
|
||||
memcpy(v1, p, 16);
|
||||
pcmpgtw(v2, v1, vz);
|
||||
|
|
|
@ -44,7 +44,7 @@ char16_t *utf8toutf16(const char *p, size_t n, size_t *z) {
|
|||
if ((q = r = malloc(n * sizeof(char16_t) * 2 + sizeof(char16_t)))) {
|
||||
for (i = 0; i < n;) {
|
||||
if (i + 16 < n) { /* 34x ascii */
|
||||
memset(vz, 0, 16);
|
||||
bzero(vz, 16);
|
||||
do {
|
||||
memcpy(v1, p + i, 16);
|
||||
pcmpgtb((int8_t *)v2, (int8_t *)v1, (int8_t *)vz);
|
||||
|
|
|
@ -46,7 +46,7 @@ wchar_t *utf8toutf32(const char *p, size_t n, size_t *z) {
|
|||
if ((q = r = malloc(n * sizeof(wchar_t) + sizeof(wchar_t)))) {
|
||||
for (i = 0; i < n;) {
|
||||
if (i + 16 < n) { /* 10x speedup for ascii */
|
||||
memset(vz, 0, 16);
|
||||
bzero(vz, 16);
|
||||
do {
|
||||
memcpy(v1, p + i, 16);
|
||||
pcmpgtb((int8_t *)v2, (int8_t *)v1, (int8_t *)vz);
|
||||
|
|
|
@ -55,7 +55,9 @@ void *xunbing(const char16_t *) _XMAL _XRET;
|
|||
char16_t *utf8toutf16(const char *, size_t, size_t *) nodiscard;
|
||||
char *utf16toutf8(const char16_t *, size_t, size_t *) nodiscard;
|
||||
wchar_t *utf8toutf32(const char *, size_t, size_t *) nodiscard;
|
||||
wchar_t *utf16to32(const char16_t *, size_t, size_t *) nodiscard;
|
||||
char *xhomedir(void) nodiscard;
|
||||
char *xstripext(const char *) nodiscard;
|
||||
char *xstripexts(const char *) nodiscard;
|
||||
|
||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||
|
|
|
@ -28,6 +28,6 @@ void *xmemalignzero(size_t alignment, size_t bytes) {
|
|||
void *p;
|
||||
p = memalign(alignment, bytes);
|
||||
if (!p) xdie();
|
||||
memset(p, 0, bytes);
|
||||
bzero(p, bytes);
|
||||
return p;
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ int xsigaction(int sig, void *handler, uint64_t flags, uint64_t mask,
|
|||
parity; (2) compiler emits 1/3rd as much binary code at call-site;
|
||||
and (3) it removes typing that just whines without added saftey. */
|
||||
struct sigaction sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
bzero(&sa, sizeof(sa));
|
||||
sa.sa_handler = handler;
|
||||
sa.sa_flags = flags;
|
||||
memcpy(&sa.sa_mask, &mask, sizeof(mask));
|
||||
|
|
30
libc/x/xstripext.c
Normal file
30
libc/x/xstripext.c
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*-*- 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 2021 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/fmt/conv.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
/**
|
||||
* Removes file extension.
|
||||
*
|
||||
* @param s is mutated
|
||||
* @return s
|
||||
*/
|
||||
char *xstripext(const char *s) {
|
||||
return stripext(xstrdup(s));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue