mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-28 08:12:28 +00:00
Reduce number of disk seeks in redbean
This commit is contained in:
parent
daa32d27d4
commit
01e6b3ad8d
8 changed files with 212 additions and 173 deletions
|
@ -52,6 +52,8 @@
|
|||
*
|
||||
* Be sure to check for EINTR on your i/o calls, for best low latency.
|
||||
*
|
||||
* Timers are not inherited across fork.
|
||||
*
|
||||
* @param which can be ITIMER_REAL, ITIMER_VIRTUAL, etc.
|
||||
* @param newvalue specifies the interval ({0,0} means one-shot) and
|
||||
* duration ({0,0} means disarm) in microseconds ∈ [0,999999] and
|
||||
|
|
164
libc/fmt/kerrornames.S
Normal file
164
libc/fmt/kerrornames.S
Normal file
|
@ -0,0 +1,164 @@
|
|||
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
|
||||
│vi: set et ft=asm ts=8 tw=8 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/macros.internal.h"
|
||||
|
||||
.macro .e e
|
||||
.long \e - kErrorNames
|
||||
.long 1f - kErrorNames
|
||||
.section .rodata.str1.1
|
||||
1: .string "\e"
|
||||
.previous
|
||||
.endm
|
||||
|
||||
.section .rodata
|
||||
.align 4
|
||||
kErrorNames:
|
||||
.e ENOSYS
|
||||
.e EPERM
|
||||
.e ENOENT
|
||||
.e ESRCH
|
||||
.e EINTR
|
||||
.e EIO
|
||||
.e ENXIO
|
||||
.e E2BIG
|
||||
.e ENOEXEC
|
||||
.e EBADF
|
||||
.e ECHILD
|
||||
.e EAGAIN
|
||||
.e ENOMEM
|
||||
.e EACCES
|
||||
.e EFAULT
|
||||
.e ENOTBLK
|
||||
.e EBUSY
|
||||
.e EEXIST
|
||||
.e EXDEV
|
||||
.e ENODEV
|
||||
.e ENOTDIR
|
||||
.e EISDIR
|
||||
.e EINVAL
|
||||
.e ENFILE
|
||||
.e EMFILE
|
||||
.e ENOTTY
|
||||
.e ETXTBSY
|
||||
.e EFBIG
|
||||
.e ENOSPC
|
||||
.e EDQUOT
|
||||
.e ESPIPE
|
||||
.e EROFS
|
||||
.e EMLINK
|
||||
.e EPIPE
|
||||
.e EDOM
|
||||
.e ERANGE
|
||||
.e EDEADLK
|
||||
.e ENAMETOOLONG
|
||||
.e ENOLCK
|
||||
.e ENOTEMPTY
|
||||
.e ELOOP
|
||||
.e ENOMSG
|
||||
.e EIDRM
|
||||
.e ETIME
|
||||
.e EPROTO
|
||||
.e EOVERFLOW
|
||||
.e EILSEQ
|
||||
.e EUSERS
|
||||
.e ENOTSOCK
|
||||
.e EDESTADDRREQ
|
||||
.e EMSGSIZE
|
||||
.e EPROTOTYPE
|
||||
.e ENOPROTOOPT
|
||||
.e EPROTONOSUPPORT
|
||||
.e ESOCKTNOSUPPORT
|
||||
.e ENOTSUP
|
||||
.e EOPNOTSUPP
|
||||
.e EPFNOSUPPORT
|
||||
.e EAFNOSUPPORT
|
||||
.e EADDRINUSE
|
||||
.e EADDRNOTAVAIL
|
||||
.e ENETDOWN
|
||||
.e ENETUNREACH
|
||||
.e ENETRESET
|
||||
.e ECONNABORTED
|
||||
.e ECONNRESET
|
||||
.e ENOBUFS
|
||||
.e EISCONN
|
||||
.e ENOTCONN
|
||||
.e ESHUTDOWN
|
||||
.e ETOOMANYREFS
|
||||
.e ETIMEDOUT
|
||||
.e ECONNREFUSED
|
||||
.e EHOSTDOWN
|
||||
.e EHOSTUNREACH
|
||||
.e EALREADY
|
||||
.e EINPROGRESS
|
||||
.e ESTALE
|
||||
.e EREMOTE
|
||||
.e EBADMSG
|
||||
.e ECANCELED
|
||||
.e EOWNERDEAD
|
||||
.e ENOTRECOVERABLE
|
||||
.e ENONET
|
||||
.e ERESTART
|
||||
.e ECHRNG
|
||||
.e EL2NSYNC
|
||||
.e EL3HLT
|
||||
.e EL3RST
|
||||
.e ELNRNG
|
||||
.e EUNATCH
|
||||
.e ENOCSI
|
||||
.e EL2HLT
|
||||
.e EBADE
|
||||
.e EBADR
|
||||
.e EXFULL
|
||||
.e ENOANO
|
||||
.e EBADRQC
|
||||
.e EBADSLT
|
||||
.e ENOSTR
|
||||
.e ENODATA
|
||||
.e ENOSR
|
||||
.e ENOPKG
|
||||
.e ENOLINK
|
||||
.e EADV
|
||||
.e ESRMNT
|
||||
.e ECOMM
|
||||
.e EMULTIHOP
|
||||
.e EDOTDOT
|
||||
.e ENOTUNIQ
|
||||
.e EBADFD
|
||||
.e EREMCHG
|
||||
.e ELIBACC
|
||||
.e ELIBBAD
|
||||
.e ELIBSCN
|
||||
.e ELIBMAX
|
||||
.e ELIBEXEC
|
||||
.e ESTRPIPE
|
||||
.e EUCLEAN
|
||||
.e ENOTNAM
|
||||
.e ENAVAIL
|
||||
.e EISNAM
|
||||
.e EREMOTEIO
|
||||
.e ENOMEDIUM
|
||||
.e EMEDIUMTYPE
|
||||
.e ENOKEY
|
||||
.e EKEYEXPIRED
|
||||
.e EKEYREVOKED
|
||||
.e EKEYREJECTED
|
||||
.e ERFKILL
|
||||
.e EHWPOISON
|
||||
.long 0
|
||||
.endobj kErrorNames,globl,hidden
|
|
@ -27,149 +27,17 @@
|
|||
#include "libc/nt/runtime.h"
|
||||
#include "libc/str/str.h"
|
||||
|
||||
const struct Error {
|
||||
const long *x;
|
||||
const char *s;
|
||||
} kErrors[] = {
|
||||
{&ENOSYS, "ENOSYS"},
|
||||
{&EPERM, "EPERM"},
|
||||
{&ENOENT, "ENOENT"},
|
||||
{&ESRCH, "ESRCH"},
|
||||
{&EINTR, "EINTR"},
|
||||
{&EIO, "EIO"},
|
||||
{&ENXIO, "ENXIO"},
|
||||
{&E2BIG, "E2BIG"},
|
||||
{&ENOEXEC, "ENOEXEC"},
|
||||
{&EBADF, "EBADF"},
|
||||
{&ECHILD, "ECHILD"},
|
||||
{&EAGAIN, "EAGAIN"},
|
||||
{&ENOMEM, "ENOMEM"},
|
||||
{&EACCES, "EACCES"},
|
||||
{&EFAULT, "EFAULT"},
|
||||
{&ENOTBLK, "ENOTBLK"},
|
||||
{&EBUSY, "EBUSY"},
|
||||
{&EEXIST, "EEXIST"},
|
||||
{&EXDEV, "EXDEV"},
|
||||
{&ENODEV, "ENODEV"},
|
||||
{&ENOTDIR, "ENOTDIR"},
|
||||
{&EISDIR, "EISDIR"},
|
||||
{&EINVAL, "EINVAL"},
|
||||
{&ENFILE, "ENFILE"},
|
||||
{&EMFILE, "EMFILE"},
|
||||
{&ENOTTY, "ENOTTY"},
|
||||
{&ETXTBSY, "ETXTBSY"},
|
||||
{&EFBIG, "EFBIG"},
|
||||
{&ENOSPC, "ENOSPC"},
|
||||
{&EDQUOT, "EDQUOT"},
|
||||
{&ESPIPE, "ESPIPE"},
|
||||
{&EROFS, "EROFS"},
|
||||
{&EMLINK, "EMLINK"},
|
||||
{&EPIPE, "EPIPE"},
|
||||
{&EDOM, "EDOM"},
|
||||
{&ERANGE, "ERANGE"},
|
||||
{&EDEADLK, "EDEADLK"},
|
||||
{&ENAMETOOLONG, "ENAMETOOLONG"},
|
||||
{&ENOLCK, "ENOLCK"},
|
||||
{&ENOTEMPTY, "ENOTEMPTY"},
|
||||
{&ELOOP, "ELOOP"},
|
||||
{&ENOMSG, "ENOMSG"},
|
||||
{&EIDRM, "EIDRM"},
|
||||
{&ETIME, "ETIME"},
|
||||
{&EPROTO, "EPROTO"},
|
||||
{&EOVERFLOW, "EOVERFLOW"},
|
||||
{&EILSEQ, "EILSEQ"},
|
||||
{&EUSERS, "EUSERS"},
|
||||
{&ENOTSOCK, "ENOTSOCK"},
|
||||
{&EDESTADDRREQ, "EDESTADDRREQ"},
|
||||
{&EMSGSIZE, "EMSGSIZE"},
|
||||
{&EPROTOTYPE, "EPROTOTYPE"},
|
||||
{&ENOPROTOOPT, "ENOPROTOOPT"},
|
||||
{&EPROTONOSUPPORT, "EPROTONOSUPPORT"},
|
||||
{&ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT"},
|
||||
{&ENOTSUP, "ENOTSUP"},
|
||||
{&EOPNOTSUPP, "EOPNOTSUPP"},
|
||||
{&EPFNOSUPPORT, "EPFNOSUPPORT"},
|
||||
{&EAFNOSUPPORT, "EAFNOSUPPORT"},
|
||||
{&EADDRINUSE, "EADDRINUSE"},
|
||||
{&EADDRNOTAVAIL, "EADDRNOTAVAIL"},
|
||||
{&ENETDOWN, "ENETDOWN"},
|
||||
{&ENETUNREACH, "ENETUNREACH"},
|
||||
{&ENETRESET, "ENETRESET"},
|
||||
{&ECONNABORTED, "ECONNABORTED"},
|
||||
{&ECONNRESET, "ECONNRESET"},
|
||||
{&ENOBUFS, "ENOBUFS"},
|
||||
{&EISCONN, "EISCONN"},
|
||||
{&ENOTCONN, "ENOTCONN"},
|
||||
{&ESHUTDOWN, "ESHUTDOWN"},
|
||||
{&ETOOMANYREFS, "ETOOMANYREFS"},
|
||||
{&ETIMEDOUT, "ETIMEDOUT"},
|
||||
{&ECONNREFUSED, "ECONNREFUSED"},
|
||||
{&EHOSTDOWN, "EHOSTDOWN"},
|
||||
{&EHOSTUNREACH, "EHOSTUNREACH"},
|
||||
{&EALREADY, "EALREADY"},
|
||||
{&EINPROGRESS, "EINPROGRESS"},
|
||||
{&ESTALE, "ESTALE"},
|
||||
{&EREMOTE, "EREMOTE"},
|
||||
{&EBADMSG, "EBADMSG"},
|
||||
{&ECANCELED, "ECANCELED"},
|
||||
{&EOWNERDEAD, "EOWNERDEAD"},
|
||||
{&ENOTRECOVERABLE, "ENOTRECOVERABLE"},
|
||||
{&ENONET, "ENONET"},
|
||||
{&ERESTART, "ERESTART"},
|
||||
{&ECHRNG, "ECHRNG"},
|
||||
{&EL2NSYNC, "EL2NSYNC"},
|
||||
{&EL3HLT, "EL3HLT"},
|
||||
{&EL3RST, "EL3RST"},
|
||||
{&ELNRNG, "ELNRNG"},
|
||||
{&EUNATCH, "EUNATCH"},
|
||||
{&ENOCSI, "ENOCSI"},
|
||||
{&EL2HLT, "EL2HLT"},
|
||||
{&EBADE, "EBADE"},
|
||||
{&EBADR, "EBADR"},
|
||||
{&EXFULL, "EXFULL"},
|
||||
{&ENOANO, "ENOANO"},
|
||||
{&EBADRQC, "EBADRQC"},
|
||||
{&EBADSLT, "EBADSLT"},
|
||||
{&ENOSTR, "ENOSTR"},
|
||||
{&ENODATA, "ENODATA"},
|
||||
{&ENOSR, "ENOSR"},
|
||||
{&ENOPKG, "ENOPKG"},
|
||||
{&ENOLINK, "ENOLINK"},
|
||||
{&EADV, "EADV"},
|
||||
{&ESRMNT, "ESRMNT"},
|
||||
{&ECOMM, "ECOMM"},
|
||||
{&EMULTIHOP, "EMULTIHOP"},
|
||||
{&EDOTDOT, "EDOTDOT"},
|
||||
{&ENOTUNIQ, "ENOTUNIQ"},
|
||||
{&EBADFD, "EBADFD"},
|
||||
{&EREMCHG, "EREMCHG"},
|
||||
{&ELIBACC, "ELIBACC"},
|
||||
{&ELIBBAD, "ELIBBAD"},
|
||||
{&ELIBSCN, "ELIBSCN"},
|
||||
{&ELIBMAX, "ELIBMAX"},
|
||||
{&ELIBEXEC, "ELIBEXEC"},
|
||||
{&ESTRPIPE, "ESTRPIPE"},
|
||||
{&EUCLEAN, "EUCLEAN"},
|
||||
{&ENOTNAM, "ENOTNAM"},
|
||||
{&ENAVAIL, "ENAVAIL"},
|
||||
{&EISNAM, "EISNAM"},
|
||||
{&EREMOTEIO, "EREMOTEIO"},
|
||||
{&ENOMEDIUM, "ENOMEDIUM"},
|
||||
{&EMEDIUMTYPE, "EMEDIUMTYPE"},
|
||||
{&ENOKEY, "ENOKEY"},
|
||||
{&EKEYEXPIRED, "EKEYEXPIRED"},
|
||||
{&EKEYREVOKED, "EKEYREVOKED"},
|
||||
{&EKEYREJECTED, "EKEYREJECTED"},
|
||||
{&ERFKILL, "ERFKILL"},
|
||||
{&EHWPOISON, "EHWPOISON"},
|
||||
};
|
||||
extern const struct Error {
|
||||
int x;
|
||||
int s;
|
||||
} kErrorNames[];
|
||||
|
||||
static const char *geterrname(long x) {
|
||||
static const char *GetErrorName(long x) {
|
||||
int i;
|
||||
if (x) {
|
||||
for (i = 0; i < ARRAYLEN(kErrors); ++i) {
|
||||
if (x == *kErrors[i].x) {
|
||||
return kErrors[i].s;
|
||||
for (i = 0; kErrorNames[i].x; ++i) {
|
||||
if (x == *(const long *)((uintptr_t)kErrorNames + kErrorNames[i].x)) {
|
||||
return (const char *)((uintptr_t)kErrorNames + kErrorNames[i].s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -184,7 +52,7 @@ int strerror_r(int err, char *buf, size_t size) {
|
|||
char *p;
|
||||
const char *s;
|
||||
err &= 0xFFFF;
|
||||
s = geterrname(err);
|
||||
s = GetErrorName(err);
|
||||
p = buf;
|
||||
if (strlen(s) + 1 + 5 + 1 + 1 <= size) {
|
||||
p = stpcpy(p, s);
|
||||
|
|
|
@ -24,6 +24,7 @@ _peekall:
|
|||
.leafprologue
|
||||
ezlea _base,si
|
||||
ezlea _end,cx
|
||||
add $0x1000,%rsi
|
||||
0: mov (%rsi),%eax
|
||||
add $PAGESIZE,%rsi
|
||||
cmp %rcx,%rsi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue