mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-28 13:30:29 +00:00
Fix bugs and make code tinier
- Fixed bug where stdio eof wasn't being sticky - Fixed bug where fseeko() wasn't clearing eof state - Removed assert() usage from libc favoring _unassert() / _npassert()
This commit is contained in:
parent
9b7c8db846
commit
d5910e2673
115 changed files with 510 additions and 290 deletions
|
@ -61,7 +61,7 @@ noasan int __cxa_atexit(void *fp, void *arg, void *pred) {
|
|||
}
|
||||
}
|
||||
i = _bsr(~b->mask);
|
||||
assert(i < ARRAYLEN(b->p));
|
||||
_unassert(i < ARRAYLEN(b->p));
|
||||
b->mask |= 1u << i;
|
||||
b->p[i].fp = fp;
|
||||
b->p[i].arg = arg;
|
||||
|
|
|
@ -60,7 +60,7 @@ StartOverLocked:
|
|||
if (!pred) {
|
||||
b2 = b->next;
|
||||
if (b2) {
|
||||
assert(b != &__cxa_blocks.root);
|
||||
_npassert(b != &__cxa_blocks.root);
|
||||
if (_weaken(free)) {
|
||||
_weaken(free)(b);
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ const char *DescribeSockOptname(char[32], int, int);
|
|||
const char *DescribeSocketFamily(char[12], int);
|
||||
const char *DescribeSocketProtocol(char[12], int);
|
||||
const char *DescribeSocketType(char[64], int);
|
||||
const char *DescribeStdioState(char[12], int);
|
||||
const char *DescribeWhence(char[12], int);
|
||||
|
||||
#define DescribeArchPrctlCode(x) DescribeArchPrctlCode(alloca(12), x)
|
||||
|
@ -99,6 +100,7 @@ const char *DescribeWhence(char[12], int);
|
|||
#define DescribeSocketFamily(x) DescribeSocketFamily(alloca(12), x)
|
||||
#define DescribeSocketProtocol(x) DescribeSocketProtocol(alloca(12), x)
|
||||
#define DescribeSocketType(x) DescribeSocketType(alloca(64), x)
|
||||
#define DescribeStdioState(x) DescribeStdioState(alloca(12), x)
|
||||
#define DescribeWhence(x) DescribeWhence(alloca(12), x)
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
|
|
|
@ -34,10 +34,7 @@ const char *(DescribeOpenFlags)(char buf[128], int x) {
|
|||
struct DescribeFlags d[N];
|
||||
// TODO(jart): unify DescribeFlags and MagnumStr data structures
|
||||
for (n = 0; kOpenFlags[n].x != MAGNUM_TERMINATOR; ++n) {
|
||||
if (n == N) {
|
||||
assert(!"too many open flags");
|
||||
break;
|
||||
}
|
||||
if (n == N) notpossible;
|
||||
}
|
||||
for (i = 0; i < n; ++i) {
|
||||
d[i].flag = MAGNUM_NUMBER(kOpenFlags, i);
|
||||
|
|
29
libc/intrin/describestdiostate.c
Normal file
29
libc/intrin/describestdiostate.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*-*- 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 2022 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/itoa.h"
|
||||
#include "libc/intrin/describeflags.internal.h"
|
||||
#include "libc/str/str.h"
|
||||
|
||||
const char *(DescribeStdioState)(char buf[12], int x) {
|
||||
if (!x) return "";
|
||||
if (x == -1) return "EOF";
|
||||
if (x > 0) return _strerrno(x);
|
||||
FormatInt32(buf, x);
|
||||
return buf;
|
||||
}
|
|
@ -74,7 +74,7 @@ textwindows struct DirectMap sys_mmap_nt(void *addr, size_t size, int prot,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
assert(flags & MAP_ANONYMOUS);
|
||||
_unassert(flags & MAP_ANONYMOUS);
|
||||
fl = (struct ProtectNt){kNtPageExecuteReadwrite,
|
||||
kNtFileMapWrite | kNtFileMapExecute};
|
||||
}
|
||||
|
|
|
@ -26,6 +26,6 @@
|
|||
* This function may only be called if IsWindows() is true.
|
||||
*/
|
||||
privileged bool(IsAtLeastWindows10)(void) {
|
||||
assert(IsWindows());
|
||||
_unassert(IsWindows());
|
||||
return IsAtLeastWindows10();
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
({ \
|
||||
typeof((a) + (b)) a_ = (a); \
|
||||
typeof(a_) b_ = (b); \
|
||||
assert(a_ >= 0); \
|
||||
assert(b_ >= 0); \
|
||||
_unassert(a_ >= 0); \
|
||||
_unassert(b_ >= 0); \
|
||||
asm("add\t%1,%0\n\t" \
|
||||
"rcr\t%0" \
|
||||
: "+r"(a_) \
|
||||
|
|
|
@ -56,14 +56,14 @@ errno_t pthread_once(pthread_once_t *once, void init(void)) {
|
|||
memory_order_acquire,
|
||||
memory_order_relaxed)) {
|
||||
init();
|
||||
atomic_store(&once->_lock, FINISHED);
|
||||
atomic_store_explicit(&once->_lock, FINISHED, memory_order_release);
|
||||
return 0;
|
||||
}
|
||||
// fallthrough
|
||||
case CALLING:
|
||||
do {
|
||||
pthread_yield();
|
||||
} while (atomic_load_explicit(&once->_lock, memory_order_relaxed) ==
|
||||
} while (atomic_load_explicit(&once->_lock, memory_order_acquire) ==
|
||||
CALLING);
|
||||
return 0;
|
||||
case FINISHED:
|
||||
|
|
|
@ -3,10 +3,11 @@
|
|||
#include "libc/intrin/likely.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
|
||||
#define _KERNTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _POLLTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _DATATRACE 1 /* not configurable w/ flag yet */
|
||||
#define _NTTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _KERNTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _POLLTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _DATATRACE 1 /* not configurable w/ flag yet */
|
||||
#define _STDIOTRACE 0 /* not configurable w/ flag yet */
|
||||
#define _NTTRACE 0 /* not configurable w/ flag yet */
|
||||
|
||||
#define STRACE_PROLOGUE "%rSYS %6P %'18T "
|
||||
|
||||
|
@ -42,6 +43,12 @@ COSMOPOLITAN_C_START_
|
|||
#define KERNTRACE(FMT, ...) (void)0
|
||||
#endif
|
||||
|
||||
#if defined(SYSDEBUG) && _STDIOTRACE
|
||||
#define STDIOTRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
||||
#else
|
||||
#define STDIOTRACE(FMT, ...) (void)0
|
||||
#endif
|
||||
|
||||
#if defined(SYSDEBUG) && _NTTRACE
|
||||
#define NTTRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
||||
#else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue