mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-12 09:17:53 +00:00
The new asynchronous signal delivery technique is now also being used for tkill(), raise(), etc. Many subtle issues have been addresesd. We now signal handling on Windows that's remarkably similar to the POSIX behaviors. However that's just across threads. We're lacking a way to have the signal semantics work well, across multiple WIN32 processes.
50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
#ifndef COSMOPOLITAN_LIBC_CALLS_INTERNAL_H_
|
|
#define COSMOPOLITAN_LIBC_CALLS_INTERNAL_H_
|
|
#include "libc/atomic.h"
|
|
#include "libc/calls/struct/fd.internal.h"
|
|
#include "libc/calls/struct/sigval.h"
|
|
#include "libc/dce.h"
|
|
#include "libc/macros.internal.h"
|
|
|
|
#define kSigactionMinRva 8 /* >SIG_{ERR,DFL,IGN,...} */
|
|
|
|
#define kSigOpRestartable 1
|
|
#define kSigOpNochld 2
|
|
#define kSigOpUnmaskable 4
|
|
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
COSMOPOLITAN_C_START_
|
|
|
|
#define kIoMotion ((const int8_t[3]){1, 0, 0})
|
|
|
|
extern struct Fds g_fds;
|
|
extern atomic_int __umask;
|
|
extern const struct Fd kEmptyFd;
|
|
|
|
int __reservefd(int);
|
|
int __reservefd_unlocked(int);
|
|
void __releasefd(int);
|
|
int __ensurefds(int);
|
|
int __ensurefds_unlocked(int);
|
|
void __printfds(void);
|
|
uint32_t __synthesize_uid(void);
|
|
|
|
forceinline int64_t __getfdhandleactual(int fd) {
|
|
return g_fds.p[fd].handle;
|
|
}
|
|
|
|
forceinline bool __isfdopen(int fd) {
|
|
return 0 <= fd && fd < g_fds.n && g_fds.p[fd].kind != kFdEmpty;
|
|
}
|
|
|
|
forceinline bool __isfdkind(int fd, int kind) {
|
|
return 0 <= fd && fd < g_fds.n && g_fds.p[fd].kind == kind;
|
|
}
|
|
|
|
int _check_interrupts(int);
|
|
int sys_close_nt(struct Fd *, int);
|
|
int sys_openat_metal(int, const char *, int, unsigned);
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_CALLS_INTERNAL_H_ */
|