mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-06 03:08:31 +00:00
Replace COSMO define with _COSMO_SOURCE
This change might cause ABI breakages for /opt/cosmos. It's needed to help us better conform to header declaration practices.
This commit is contained in:
parent
a033b65a33
commit
c776a32f75
238 changed files with 858 additions and 1069 deletions
|
@ -19,6 +19,7 @@
|
|||
#include "libc/assert.h"
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/struct/itimerval.h"
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/sysv/consts/itimer.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -54,6 +54,19 @@
|
|||
#define WIFCONTINUED(x) __wifcontinued(x)
|
||||
#define W_STOPCODE(x) ((x) << 8 | 0177)
|
||||
|
||||
#ifdef _COSMO_SOURCE
|
||||
#define clone __clone
|
||||
#define commandv __commandv
|
||||
#define fileexists __fileexists
|
||||
#define ischardev __ischardev
|
||||
#define isdirectory __isdirectory
|
||||
#define isexecutable __isexecutable
|
||||
#define isregularfile __isregularfile
|
||||
#define issymlink __issymlink
|
||||
#define makedirs __makedirs
|
||||
#define tmpfd __tmpfd
|
||||
#endif
|
||||
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||
|
@ -63,7 +76,6 @@ COSMOPOLITAN_C_START_
|
|||
typedef int sig_atomic_t;
|
||||
|
||||
bool32 isatty(int);
|
||||
char *get_current_dir_name(void) dontdiscard;
|
||||
char *getcwd(char *, size_t);
|
||||
char *realpath(const char *, char *);
|
||||
char *ttyname(int);
|
||||
|
@ -79,15 +91,12 @@ int creat(const char *, unsigned);
|
|||
int dup(int);
|
||||
int dup2(int, int);
|
||||
int dup3(int, int, int);
|
||||
int eaccess(const char *, int);
|
||||
int euidaccess(const char *, int);
|
||||
int execl(const char *, const char *, ...) nullterminated();
|
||||
int execle(const char *, const char *, ...) nullterminated((1));
|
||||
int execlp(const char *, const char *, ...) nullterminated();
|
||||
int execv(const char *, char *const[]);
|
||||
int execve(const char *, char *const[], char *const[]);
|
||||
int execvp(const char *, char *const[]);
|
||||
int execvpe(const char *, char *const[], char *const[]);
|
||||
int faccessat(int, const char *, int, int);
|
||||
int fadvise(int, uint64_t, uint64_t, int);
|
||||
int fchdir(int);
|
||||
|
@ -111,12 +120,8 @@ int getpgrp(void) nosideeffect;
|
|||
int getpid(void) nosideeffect libcesque;
|
||||
int getppid(void);
|
||||
int getpriority(int, unsigned);
|
||||
int getresgid(unsigned *, unsigned *, unsigned *);
|
||||
int getresuid(unsigned *, unsigned *, unsigned *);
|
||||
int getsid(int) nosideeffect libcesque;
|
||||
int ioctl(int, unsigned long, ...);
|
||||
int ioprio_get(int, int);
|
||||
int ioprio_set(int, int, int);
|
||||
int issetugid(void);
|
||||
int kill(int, int);
|
||||
int killpg(int, int);
|
||||
|
@ -124,7 +129,6 @@ int lchmod(const char *, unsigned);
|
|||
int lchown(const char *, unsigned, unsigned);
|
||||
int link(const char *, const char *) dontthrow;
|
||||
int linkat(int, const char *, int, const char *, int);
|
||||
int madvise(void *, uint64_t, int);
|
||||
int mincore(void *, size_t, unsigned char *);
|
||||
int mkdir(const char *, unsigned);
|
||||
int mkdirat(int, const char *, unsigned);
|
||||
|
@ -140,7 +144,6 @@ int pipe(int[hasatleast 2]);
|
|||
int pipe2(int[hasatleast 2], int);
|
||||
int posix_fadvise(int, int64_t, int64_t, int);
|
||||
int posix_madvise(void *, uint64_t, int);
|
||||
int prctl(int, ...);
|
||||
int raise(int);
|
||||
int reboot(int);
|
||||
int remove(const char *);
|
||||
|
@ -158,8 +161,6 @@ int setpgid(int, int);
|
|||
int setpgrp(void);
|
||||
int setpriority(int, unsigned, int);
|
||||
int setregid(unsigned, unsigned);
|
||||
int setresgid(unsigned, unsigned, unsigned);
|
||||
int setresuid(unsigned, unsigned, unsigned);
|
||||
int setreuid(unsigned, unsigned);
|
||||
int setsid(void);
|
||||
int setuid(unsigned);
|
||||
|
@ -167,9 +168,6 @@ int sigignore(int);
|
|||
int siginterrupt(int, int);
|
||||
int symlink(const char *, const char *);
|
||||
int symlinkat(const char *, int, const char *);
|
||||
int sync_file_range(int, int64_t, int64_t, unsigned);
|
||||
int tcgetpgrp(int);
|
||||
int tcsetpgrp(int, int);
|
||||
int truncate(const char *, int64_t);
|
||||
int ttyname_r(int, char *, size_t);
|
||||
int unlink(const char *);
|
||||
|
@ -187,7 +185,6 @@ ssize_t pwrite(int, const void *, size_t, int64_t);
|
|||
ssize_t read(int, void *, size_t);
|
||||
ssize_t readlink(const char *, char *, size_t);
|
||||
ssize_t readlinkat(int, const char *, char *, size_t);
|
||||
ssize_t splice(int, int64_t *, int, int64_t *, size_t, unsigned);
|
||||
ssize_t write(int, const void *, size_t);
|
||||
unsigned alarm(unsigned);
|
||||
unsigned getegid(void) nosideeffect;
|
||||
|
@ -198,20 +195,34 @@ unsigned sleep(unsigned);
|
|||
unsigned umask(unsigned);
|
||||
void sync(void);
|
||||
|
||||
#ifdef COSMO
|
||||
bool fileexists(const char *);
|
||||
bool isdirectory(const char *);
|
||||
bool isexecutable(const char *);
|
||||
bool isregularfile(const char *);
|
||||
bool issymlink(const char *);
|
||||
#if defined(_COSMO_SOURCE) || defined(_GNU_SOURCE)
|
||||
int syncfs(int);
|
||||
int prctl(int, ...);
|
||||
int gettid(void) libcesque;
|
||||
int setresgid(unsigned, unsigned, unsigned);
|
||||
int setresuid(unsigned, unsigned, unsigned);
|
||||
int getresgid(unsigned *, unsigned *, unsigned *);
|
||||
int getresuid(unsigned *, unsigned *, unsigned *);
|
||||
char *get_current_dir_name(void) dontdiscard;
|
||||
int sync_file_range(int, int64_t, int64_t, unsigned);
|
||||
ssize_t splice(int, int64_t *, int, int64_t *, size_t, unsigned);
|
||||
int memfd_create(const char *, unsigned int);
|
||||
int execvpe(const char *, char *const[], char *const[]);
|
||||
int euidaccess(const char *, int);
|
||||
int eaccess(const char *, int);
|
||||
int madvise(void *, uint64_t, int);
|
||||
#endif
|
||||
|
||||
#ifdef _COSMO_SOURCE
|
||||
bool32 fileexists(const char *);
|
||||
bool32 isdirectory(const char *);
|
||||
bool32 isexecutable(const char *);
|
||||
bool32 isregularfile(const char *);
|
||||
bool32 issymlink(const char *);
|
||||
bool32 ischardev(int);
|
||||
char *commandv(const char *, char *, size_t);
|
||||
char *replaceuser(const char *) dontdiscard;
|
||||
int clone(void *, void *, size_t, int, void *, void *, void *, void *);
|
||||
int gettid(void) libcesque;
|
||||
int makedirs(const char *, unsigned);
|
||||
int memfd_create(const char *, unsigned int);
|
||||
int personality(uint64_t);
|
||||
int pivot_root(const char *, const char *);
|
||||
int pledge(const char *, const char *);
|
||||
int seccomp(unsigned, unsigned, void *);
|
||||
|
@ -219,10 +230,13 @@ int sys_iopl(int);
|
|||
int sys_mlock(const void *, size_t);
|
||||
int sys_mlock2(const void *, size_t, int);
|
||||
int sys_mlockall(int);
|
||||
int sys_personality(uint64_t);
|
||||
int sys_munlock(const void *, size_t);
|
||||
int sys_munlockall(void);
|
||||
int sys_ptrace(int, ...);
|
||||
int sys_sysctl(const int *, unsigned, void *, size_t *, void *, size_t);
|
||||
int sys_ioprio_get(int, int);
|
||||
int sys_ioprio_set(int, int, int);
|
||||
int tgkill(int, int, int);
|
||||
int tkill(int, int);
|
||||
int tmpfd(void);
|
||||
|
@ -232,12 +246,21 @@ long ptrace(int, ...);
|
|||
ssize_t copyfd(int, int, size_t);
|
||||
ssize_t readansi(int, char *, size_t);
|
||||
ssize_t tinyprint(int, const char *, ...) nullterminated();
|
||||
#endif
|
||||
#endif /* _COSMO_SOURCE */
|
||||
|
||||
int __wifstopped(int) pureconst;
|
||||
int __wifcontinued(int) pureconst;
|
||||
int __wifsignaled(int) pureconst;
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#define lseek64 lseek
|
||||
#define pread64 pread
|
||||
#define pwrite64 pwrite
|
||||
#define truncate64 truncate
|
||||
#define ftruncate64 ftruncate
|
||||
#define lockf64 lockf
|
||||
#endif
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_SYSCALLS_H_ */
|
||||
|
|
|
@ -111,7 +111,7 @@ static int sys_copyfile(const char *src, const char *dst, int flags) {
|
|||
* @return 0 on success, or -1 w/ errno
|
||||
*/
|
||||
int _copyfile(const char *src, const char *dst, int flags) {
|
||||
if (!IsWindows() || _startswith(src, "/zip/") || _startswith(dst, "/zip/")) {
|
||||
if (!IsWindows() || startswith(src, "/zip/") || startswith(dst, "/zip/")) {
|
||||
return sys_copyfile(src, dst, flags);
|
||||
} else {
|
||||
return sys_copyfile_nt(src, dst, flags);
|
||||
|
|
|
@ -27,10 +27,10 @@
|
|||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/intrin/weaken.h"
|
||||
#include "libc/nt/files.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/sysv/consts/at.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
|
||||
/**
|
||||
* Returns true if file exists at path.
|
||||
|
@ -44,7 +44,7 @@
|
|||
* or sockets, could be considered files for the purposes of this
|
||||
* function. The stat() function may be used to differentiate them.
|
||||
*/
|
||||
bool fileexists(const char *path) {
|
||||
bool32 fileexists(const char *path) {
|
||||
int e;
|
||||
bool res;
|
||||
union metastat st;
|
||||
|
|
|
@ -60,7 +60,7 @@ static textwindows uint32_t GetSizeOfReparsePoint(int64_t fh) {
|
|||
x = 0xfffd;
|
||||
}
|
||||
}
|
||||
z += x < 0200 ? 1 : _bsrl(_tpenc(x)) >> 3;
|
||||
z += x < 0200 ? 1 : _bsrl(tpenc(x)) >> 3;
|
||||
}
|
||||
} else {
|
||||
STRACE("%s failed %m", "GetSizeOfReparsePoint");
|
||||
|
|
|
@ -59,7 +59,7 @@ textwindows int sys_fstatfs_nt(int64_t handle, struct statfs *f) {
|
|||
return eio();
|
||||
}
|
||||
for (h = j = i = 0; FileSystemNameBuffer[i]; i++) {
|
||||
w = _tpenc(FileSystemNameBuffer[i]);
|
||||
w = tpenc(FileSystemNameBuffer[i]);
|
||||
do {
|
||||
if (j + 1 < sizeof(f->f_fstypename)) {
|
||||
h = ((unsigned)(w & 255) + h) * 0x9e3779b1u;
|
||||
|
|
|
@ -61,7 +61,7 @@ textwindows char *sys_getcwd_nt(char *buf, size_t size) {
|
|||
}
|
||||
w = x;
|
||||
} else {
|
||||
w = _tpenc(x);
|
||||
w = tpenc(x);
|
||||
}
|
||||
do {
|
||||
if (j < size) {
|
||||
|
|
|
@ -27,10 +27,10 @@
|
|||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/intrin/weaken.h"
|
||||
#include "libc/nt/files.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
#include "libc/sysv/consts/at.h"
|
||||
#include "libc/sysv/consts/s.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
|
||||
/**
|
||||
* Returns true if file exists and is a directory.
|
||||
|
@ -45,7 +45,7 @@
|
|||
*
|
||||
* @see isregularfile(), issymlink(), ischardev()
|
||||
*/
|
||||
bool isdirectory(const char *path) {
|
||||
bool32 isdirectory(const char *path) {
|
||||
int e;
|
||||
bool res;
|
||||
union metastat st;
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
* @asyncsignalsafe
|
||||
* @vforksafe
|
||||
*/
|
||||
bool isexecutable(const char *path) {
|
||||
bool32 isexecutable(const char *path) {
|
||||
struct stat st; /* execve() depends on this */
|
||||
if (fstatat(AT_FDCWD, path, &st, 0)) return 0;
|
||||
return !S_ISDIR(st.st_mode) && !!(st.st_mode & 0111);
|
||||
|
|
|
@ -25,10 +25,10 @@
|
|||
#include "libc/intrin/asan.internal.h"
|
||||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/intrin/weaken.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
#include "libc/sysv/consts/at.h"
|
||||
#include "libc/sysv/consts/s.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
|
||||
/**
|
||||
* Returns true if file exists and is a regular file.
|
||||
|
@ -42,7 +42,7 @@
|
|||
*
|
||||
* @see isdirectory(), ischardev(), issymlink()
|
||||
*/
|
||||
bool isregularfile(const char *path) {
|
||||
bool32 isregularfile(const char *path) {
|
||||
int e;
|
||||
bool res;
|
||||
union metastat st;
|
||||
|
|
|
@ -27,10 +27,10 @@
|
|||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/intrin/weaken.h"
|
||||
#include "libc/nt/files.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
#include "libc/sysv/consts/at.h"
|
||||
#include "libc/sysv/consts/s.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#include "libc/runtime/zipos.internal.h"
|
||||
|
||||
/**
|
||||
* Returns true if file exists and is a symbolic link.
|
||||
|
@ -45,7 +45,7 @@
|
|||
*
|
||||
* @see isregularfile(), isdirectory(), fileexists(), ischardev()
|
||||
*/
|
||||
bool issymlink(const char *path) {
|
||||
bool32 issymlink(const char *path) {
|
||||
int e;
|
||||
bool res;
|
||||
union metastat st;
|
||||
|
|
|
@ -78,7 +78,7 @@ textwindows ssize_t sys_readlinkat_nt(int dirfd, const char *path, char *buf,
|
|||
}
|
||||
w = x;
|
||||
} else {
|
||||
w = _tpenc(x);
|
||||
w = tpenc(x);
|
||||
}
|
||||
do {
|
||||
if (j < bufsiz) {
|
||||
|
|
|
@ -195,7 +195,7 @@ static int __sigaction(int sig, const struct sigaction *act,
|
|||
ap->sa_flags |= SA_RESTORER;
|
||||
ap->sa_restorer = &__restore_rt;
|
||||
}
|
||||
if (IsWsl1()) {
|
||||
if (__iswsl1()) {
|
||||
sigenter = __sigenter_wsl;
|
||||
} else {
|
||||
sigenter = ap->sa_sigaction;
|
||||
|
|
|
@ -18,7 +18,7 @@ int utimensat(int, const char *, const struct timespec[2], int);
|
|||
int timespec_getres(struct timespec *, int);
|
||||
int timespec_get(struct timespec *, int);
|
||||
|
||||
#ifdef COSMO
|
||||
#ifdef _COSMO_SOURCE
|
||||
/* cosmopolitan libc's non-posix timespec library
|
||||
removed by default due to emacs codebase clash */
|
||||
#define timespec_zero ((struct timespec){0})
|
||||
|
@ -47,7 +47,7 @@ static inline bool timespec_iszero(struct timespec __ts) {
|
|||
static inline bool timespec_isvalid(struct timespec __ts) {
|
||||
return __ts.tv_sec >= 0 && __ts.tv_nsec < 1000000000ull;
|
||||
}
|
||||
#endif /* COSMO */
|
||||
#endif /* _COSMO_SOURCE */
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
|
|
|
@ -17,7 +17,7 @@ int settimeofday(const struct timeval *, const struct timezone *);
|
|||
int lutimes(const char *, const struct timeval[2]);
|
||||
int utimes(const char *, const struct timeval[2]);
|
||||
|
||||
#ifdef COSMO
|
||||
#ifdef _COSMO_SOURCE
|
||||
/* cosmopolitan libc's non-posix timevals library
|
||||
removed by default due to emacs codebase clash */
|
||||
#define timeval_zero ((struct timeval){0})
|
||||
|
@ -43,7 +43,7 @@ static inline bool timeval_iszero(struct timeval __tv) {
|
|||
static inline bool timeval_isvalid(struct timeval __tv) {
|
||||
return __tv.tv_sec >= 0 && __tv.tv_usec < 1000000ull;
|
||||
}
|
||||
#endif /* COSMO */
|
||||
#endif /* _COSMO_SOURCE */
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
|
|
37
libc/calls/syncfs.c
Normal file
37
libc/calls/syncfs.c
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*-*- 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 2023 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/calls/calls.h"
|
||||
#include "libc/calls/syscall-sysv.internal.h"
|
||||
|
||||
/**
|
||||
* Syncs filesystem associated with file descriptor.
|
||||
*
|
||||
* Since Linux 5.8, syncfs() will report an error if an inode failed to
|
||||
* be written during the time since syncfs() was last called.
|
||||
*
|
||||
* @return 0 on success, or -1 w/ errno
|
||||
* @raise EIO if some kind of data/metadata write error happened
|
||||
* @raise ENOSPC if disk space was exhausted during sync
|
||||
* @raise EDQUOT (or ENOSPC) on some kinds of NFS errors
|
||||
* @raise EBADF if `fd` isn't a valid file descriptor
|
||||
* @raise ENOSYS on non-Linux
|
||||
*/
|
||||
int syncfs(int fd) {
|
||||
return sys_syncfs(fd);
|
||||
}
|
|
@ -109,6 +109,7 @@ i32 sys_sigaltstack(const void *, void *);
|
|||
i32 sys_symlinkat(const char *, i32, const char *);
|
||||
i32 sys_sync(void);
|
||||
i32 sys_sync_file_range(i32, i64, i64, u32);
|
||||
i32 sys_syncfs(i32);
|
||||
i32 sys_syslog(i32, char *, i32);
|
||||
i32 sys_tgkill(i32, i32, i32);
|
||||
i32 sys_tkill(i32, i32, void *);
|
||||
|
|
|
@ -25,8 +25,10 @@ int posix_openpt(int) dontdiscard;
|
|||
|
||||
int tcdrain(int);
|
||||
int tcgetsid(int);
|
||||
int tcgetpgrp(int);
|
||||
int tcflow(int, int);
|
||||
int tcflush(int, int);
|
||||
int tcsetpgrp(int, int);
|
||||
int tcsendbreak(int, int);
|
||||
void cfmakeraw(struct termios *);
|
||||
int cfsetspeed(struct termios *, uint32_t);
|
||||
|
|
|
@ -32,7 +32,8 @@
|
|||
int verynice(void) {
|
||||
int e = errno;
|
||||
setpriority(PRIO_PROCESS, 0, 10);
|
||||
ioprio_set(IOPRIO_WHO_PROCESS, 0, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
|
||||
sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
|
||||
IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
|
||||
struct sched_param param = {sched_get_priority_min(SCHED_IDLE)};
|
||||
sched_setscheduler(0, SCHED_IDLE, ¶m);
|
||||
errno = e;
|
||||
|
|
|
@ -49,5 +49,13 @@ typedef uint32_t nlink_t; /* uint16_t on xnu */
|
|||
#define TIME_T_MAX __INT64_MAX__
|
||||
#define TIME_T_MIN (-TIME_T_MAX - 1)
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#define blkcnt64_t blkcnt_t
|
||||
#define fsblkcnt64_t fsblkcnt_t
|
||||
#define fsfilcnt64_t fsfilcnt_t
|
||||
#define ino64_t ino_t
|
||||
#define off64_t off_t
|
||||
#endif
|
||||
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_WEIRDTYPES_H_ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue