mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-14 15:09:09 +00:00
Make more fixups and quality assurance
This commit is contained in:
parent
85c58be942
commit
dcf9596620
17 changed files with 80 additions and 78 deletions
|
@ -21,7 +21,6 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/intrin/describeflags.h"
|
||||
#include "libc/intrin/strace.h"
|
||||
#include "libc/stdckdint.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -56,7 +56,6 @@ static textwindows int sys_pipe_nt_impl(int pipefd[2], unsigned flags) {
|
|||
__fds_unlock();
|
||||
hin = CreateNamedPipe(pipename, kNtPipeAccessInbound | kNtFileFlagOverlapped,
|
||||
mode, 1, PIPE_BUF, PIPE_BUF, 0, &kNtIsInheritable);
|
||||
__fds_lock();
|
||||
if (hin != -1) {
|
||||
if ((hout = CreateFile(
|
||||
pipename, kNtGenericWrite,
|
||||
|
@ -73,7 +72,6 @@ static textwindows int sys_pipe_nt_impl(int pipefd[2], unsigned flags) {
|
|||
g_fds.p[writer].handle = hout;
|
||||
pipefd[0] = reader;
|
||||
pipefd[1] = writer;
|
||||
__fds_unlock();
|
||||
return 0;
|
||||
} else {
|
||||
CloseHandle(hin);
|
||||
|
@ -81,7 +79,6 @@ static textwindows int sys_pipe_nt_impl(int pipefd[2], unsigned flags) {
|
|||
}
|
||||
__releasefd(writer);
|
||||
__releasefd(reader);
|
||||
__fds_unlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -351,13 +351,14 @@ textwindows static int sys_poll_nt_impl(struct pollfd *fds, uint64_t nfds,
|
|||
}
|
||||
}
|
||||
|
||||
textwindows int sys_poll_nt(struct pollfd *fds, uint64_t nfds, uint32_t *ms,
|
||||
textwindows int sys_poll_nt(struct pollfd *fds, uint64_t nfds,
|
||||
const struct timespec *relative,
|
||||
const sigset_t *sigmask) {
|
||||
int rc;
|
||||
struct timespec now, timeout, deadline;
|
||||
BLOCK_SIGNALS;
|
||||
now = ms ? sys_clock_gettime_monotonic_nt() : timespec_zero;
|
||||
timeout = ms ? timespec_frommillis(*ms) : timespec_max;
|
||||
now = relative ? sys_clock_gettime_monotonic_nt() : timespec_zero;
|
||||
timeout = relative ? *relative : timespec_max;
|
||||
deadline = timespec_add(now, timeout);
|
||||
rc = sys_poll_nt_impl(fds, nfds, deadline, sigmask ? *sigmask : _SigMask);
|
||||
ALLOW_SIGNALS;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/strace.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/runtime/stack.h"
|
||||
#include "libc/sock/struct/pollfd.h"
|
||||
#include "libc/sock/struct/pollfd.internal.h"
|
||||
|
@ -76,10 +77,13 @@ static int ppoll_impl(struct pollfd *fds, size_t nfds,
|
|||
}
|
||||
fdcount = sys_ppoll(fds, nfds, tsp, sigmask, 8);
|
||||
if (fdcount == -1 && errno == ENOSYS) {
|
||||
int ms;
|
||||
int64_t ms;
|
||||
errno = e;
|
||||
if (!timeout || ckd_add(&ms, timeout->tv_sec,
|
||||
(timeout->tv_nsec + 999999) / 1000000)) {
|
||||
if (timeout) {
|
||||
ms = timespec_tomillis(*timeout);
|
||||
if (ms > INT_MAX)
|
||||
ms = -1;
|
||||
} else {
|
||||
ms = -1;
|
||||
}
|
||||
if (sigmask)
|
||||
|
@ -89,15 +93,7 @@ static int ppoll_impl(struct pollfd *fds, size_t nfds,
|
|||
sys_sigprocmask(SIG_SETMASK, &oldmask, 0);
|
||||
}
|
||||
} else {
|
||||
uint32_t ms;
|
||||
uint32_t *msp;
|
||||
if (timeout &&
|
||||
!ckd_add(&ms, timeout->tv_sec, (timeout->tv_nsec + 999999) / 1000000)) {
|
||||
msp = &ms;
|
||||
} else {
|
||||
msp = 0;
|
||||
}
|
||||
fdcount = sys_poll_nt(fds, nfds, msp, sigmask);
|
||||
fdcount = sys_poll_nt(fds, nfds, timeout, sigmask);
|
||||
}
|
||||
|
||||
if (IsOpenbsd() && fdcount != -1) {
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
const struct timespec *timeout, const sigset_t *sigmask) {
|
||||
int rc;
|
||||
struct timeval tv, *tvp;
|
||||
struct timespec ts, *tsp;
|
||||
struct {
|
||||
const sigset_t *s;
|
||||
|
@ -111,14 +110,7 @@ int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||
rc = sys_pselect(nfds, readfds, writefds, exceptfds,
|
||||
(struct timespec *)timeout, sigmask);
|
||||
} else {
|
||||
if (timeout) {
|
||||
tv.tv_sec = timeout->tv_sec;
|
||||
tv.tv_usec = timeout->tv_nsec / 1000;
|
||||
tvp = &tv;
|
||||
} else {
|
||||
tvp = 0;
|
||||
}
|
||||
rc = sys_select_nt(nfds, readfds, writefds, exceptfds, tvp, sigmask);
|
||||
rc = sys_select_nt(nfds, readfds, writefds, exceptfds, timeout, sigmask);
|
||||
}
|
||||
}
|
||||
END_CANCELATION_POINT;
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include "libc/sock/sock.h"
|
||||
#include "libc/sock/struct/pollfd.h"
|
||||
#include "libc/sock/struct/pollfd.internal.h"
|
||||
#include "libc/stdckdint.h"
|
||||
#include "libc/sysv/consts/poll.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#ifdef __x86_64__
|
||||
|
@ -44,7 +43,7 @@
|
|||
// </sync libc/sysv/consts.sh>
|
||||
|
||||
int sys_select_nt(int nfds, fd_set *readfds, fd_set *writefds,
|
||||
fd_set *exceptfds, struct timeval *timeout,
|
||||
fd_set *exceptfds, const struct timespec *timeout,
|
||||
const sigset_t *sigmask) {
|
||||
int pfds = 0;
|
||||
|
||||
|
@ -68,21 +67,8 @@ int sys_select_nt(int nfds, fd_set *readfds, fd_set *writefds,
|
|||
}
|
||||
}
|
||||
|
||||
// convert the wait time to a word
|
||||
uint32_t millis;
|
||||
if (!timeout) {
|
||||
millis = -1u;
|
||||
} else {
|
||||
int64_t ms = timeval_tomillis(*timeout);
|
||||
if (ms < 0 || ms > UINT32_MAX) {
|
||||
millis = -1u;
|
||||
} else {
|
||||
millis = ms;
|
||||
}
|
||||
}
|
||||
|
||||
// call our nt poll implementation
|
||||
int fdcount = sys_poll_nt(fds, pfds, &millis, sigmask);
|
||||
int fdcount = sys_poll_nt(fds, pfds, timeout, sigmask);
|
||||
if (fdcount == -1)
|
||||
return -1;
|
||||
|
||||
|
@ -115,10 +101,6 @@ int sys_select_nt(int nfds, fd_set *readfds, fd_set *writefds,
|
|||
}
|
||||
}
|
||||
|
||||
// store remaining time back in caller's timeval
|
||||
if (timeout)
|
||||
*timeout = timeval_frommillis(millis);
|
||||
|
||||
return bits;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,10 +31,7 @@
|
|||
* such as out-of-band data on a socket; it is equivalent to POLLPRI
|
||||
* in the revents of poll()
|
||||
* @param timeout may be null which means to block indefinitely; cosmo's
|
||||
* implementation of select() never modifies this parameter which is
|
||||
* how most platforms except Linux work which modifies it to reflect
|
||||
* elapsed time, noting that POSIX permits either behavior therefore
|
||||
* portable code should assume that timeout memory becomes undefined
|
||||
* implementation of select() never modifies this parameter
|
||||
* @raise E2BIG if we exceeded the 64 socket limit on Windows
|
||||
* @raise ECANCELED if thread was cancelled in masked mode
|
||||
* @raise EINTR if signal was delivered
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/intrin/describeflags.h"
|
||||
#include "libc/intrin/strace.h"
|
||||
#include "libc/stdckdint.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue