mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
musl: update src files to v1.2.4
This commit is contained in:
parent
cdcfd15d3c
commit
a5d8c310ee
173 changed files with 736 additions and 442 deletions
7
lib/libc/musl/arch/arm/syscall_arch.h
vendored
7
lib/libc/musl/arch/arm/syscall_arch.h
vendored
|
|
@ -101,3 +101,10 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
|
|||
#define SYSCALL_FADVISE_6_ARG
|
||||
|
||||
#define SYSCALL_IPC_BROKEN_MODE
|
||||
|
||||
#define VDSO_USEFUL
|
||||
#define VDSO_CGT32_SYM "__vdso_clock_gettime"
|
||||
#define VDSO_CGT32_VER "LINUX_2.6"
|
||||
#define VDSO_CGT_SYM "__vdso_clock_gettime64"
|
||||
#define VDSO_CGT_VER "LINUX_2.6"
|
||||
#define VDSO_CGT_WORKAROUND 1
|
||||
|
|
|
|||
1
lib/libc/musl/arch/i386/arch.mak
vendored
1
lib/libc/musl/arch/i386/arch.mak
vendored
|
|
@ -1 +0,0 @@
|
|||
COMPAT_SRC_DIRS = compat/time32
|
||||
1
lib/libc/musl/arch/m68k/arch.mak
vendored
1
lib/libc/musl/arch/m68k/arch.mak
vendored
|
|
@ -1 +0,0 @@
|
|||
COMPAT_SRC_DIRS = compat/time32
|
||||
1
lib/libc/musl/arch/mips/arch.mak
vendored
1
lib/libc/musl/arch/mips/arch.mak
vendored
|
|
@ -1 +0,0 @@
|
|||
COMPAT_SRC_DIRS = compat/time32
|
||||
1
lib/libc/musl/arch/mips/bits/signal.h
vendored
1
lib/libc/musl/arch/mips/bits/signal.h
vendored
|
|
@ -66,7 +66,6 @@ typedef struct __ucontext {
|
|||
#define SA_RESTART 0x10000000
|
||||
#define SA_NODEFER 0x40000000
|
||||
#define SA_RESETHAND 0x80000000
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
#undef SIG_BLOCK
|
||||
#undef SIG_UNBLOCK
|
||||
|
|
|
|||
5
lib/libc/musl/arch/mips/ksigaction.h
vendored
5
lib/libc/musl/arch/mips/ksigaction.h
vendored
|
|
@ -4,10 +4,7 @@ struct k_sigaction {
|
|||
unsigned flags;
|
||||
void (*handler)(int);
|
||||
unsigned long mask[4];
|
||||
/* The following field is past the end of the structure the
|
||||
* kernel will read or write, and exists only to avoid having
|
||||
* mips-specific preprocessor conditionals in sigaction.c. */
|
||||
void (*restorer)();
|
||||
void *unused;
|
||||
};
|
||||
|
||||
hidden void __restore(), __restore_rt();
|
||||
|
|
|
|||
1
lib/libc/musl/arch/mips/reloc.h
vendored
1
lib/libc/musl/arch/mips/reloc.h
vendored
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#define NEED_MIPS_GOT_RELOCS 1
|
||||
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
|
||||
#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
|
||||
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
|
||||
|
||||
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
||||
|
|
|
|||
1
lib/libc/musl/arch/mips64/bits/signal.h
vendored
1
lib/libc/musl/arch/mips64/bits/signal.h
vendored
|
|
@ -85,7 +85,6 @@ typedef struct __ucontext {
|
|||
#define SA_RESTART 0x10000000
|
||||
#define SA_NODEFER 0x40000000
|
||||
#define SA_RESETHAND 0x80000000
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
#undef SIG_BLOCK
|
||||
#undef SIG_UNBLOCK
|
||||
|
|
|
|||
2
lib/libc/musl/arch/mips64/ksigaction.h
vendored
2
lib/libc/musl/arch/mips64/ksigaction.h
vendored
|
|
@ -4,7 +4,7 @@ struct k_sigaction {
|
|||
unsigned flags;
|
||||
void (*handler)(int);
|
||||
unsigned long mask[2];
|
||||
void (*restorer)();
|
||||
void *unused;
|
||||
};
|
||||
|
||||
hidden void __restore(), __restore_rt();
|
||||
|
|
|
|||
1
lib/libc/musl/arch/mips64/reloc.h
vendored
1
lib/libc/musl/arch/mips64/reloc.h
vendored
|
|
@ -38,6 +38,7 @@
|
|||
|
||||
#define NEED_MIPS_GOT_RELOCS 1
|
||||
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
|
||||
#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
|
||||
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
|
||||
|
||||
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
||||
|
|
|
|||
1
lib/libc/musl/arch/powerpc/arch.mak
vendored
1
lib/libc/musl/arch/powerpc/arch.mak
vendored
|
|
@ -1 +0,0 @@
|
|||
COMPAT_SRC_DIRS = compat/time32
|
||||
1
lib/libc/musl/arch/riscv64/bits/signal.h
vendored
1
lib/libc/musl/arch/riscv64/bits/signal.h
vendored
|
|
@ -76,7 +76,6 @@ typedef struct __ucontext
|
|||
#define SA_RESTART 0x10000000
|
||||
#define SA_NODEFER 0x40000000
|
||||
#define SA_RESETHAND 0x80000000
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
8
lib/libc/musl/compat/time32/__xstat.c
vendored
8
lib/libc/musl/compat/time32/__xstat.c
vendored
|
|
@ -3,22 +3,22 @@
|
|||
|
||||
struct stat32;
|
||||
|
||||
int __fxstat64(int ver, int fd, struct stat32 *buf)
|
||||
int __fxstat(int ver, int fd, struct stat32 *buf)
|
||||
{
|
||||
return __fstat_time32(fd, buf);
|
||||
}
|
||||
|
||||
int __fxstatat64(int ver, int fd, const char *path, struct stat32 *buf, int flag)
|
||||
int __fxstatat(int ver, int fd, const char *path, struct stat32 *buf, int flag)
|
||||
{
|
||||
return __fstatat_time32(fd, path, buf, flag);
|
||||
}
|
||||
|
||||
int __lxstat64(int ver, const char *path, struct stat32 *buf)
|
||||
int __lxstat(int ver, const char *path, struct stat32 *buf)
|
||||
{
|
||||
return __lstat_time32(path, buf);
|
||||
}
|
||||
|
||||
int __xstat64(int ver, const char *path, struct stat32 *buf)
|
||||
int __xstat(int ver, const char *path, struct stat32 *buf)
|
||||
{
|
||||
return __stat_time32(path, buf);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,5 +7,3 @@ int __aio_suspend_time32(const struct aiocb *const cbs[], int cnt, const struct
|
|||
return aio_suspend(cbs, cnt, ts32 ? (&(struct timespec){
|
||||
.tv_sec = ts32->tv_sec, .tv_nsec = ts32->tv_nsec}) : 0);
|
||||
}
|
||||
|
||||
weak_alias(aio_suspend, aio_suspend64);
|
||||
|
|
|
|||
2
lib/libc/musl/compat/time32/fstat_time32.c
vendored
2
lib/libc/musl/compat/time32/fstat_time32.c
vendored
|
|
@ -13,5 +13,3 @@ int __fstat_time32(int fd, struct stat32 *restrict st32)
|
|||
if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim));
|
||||
return r;
|
||||
}
|
||||
|
||||
weak_alias(fstat, fstat64);
|
||||
|
|
|
|||
2
lib/libc/musl/compat/time32/fstatat_time32.c
vendored
2
lib/libc/musl/compat/time32/fstatat_time32.c
vendored
|
|
@ -13,5 +13,3 @@ int __fstatat_time32(int fd, const char *restrict path, struct stat32 *restrict
|
|||
if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim));
|
||||
return r;
|
||||
}
|
||||
|
||||
weak_alias(fstatat, fstatat64);
|
||||
|
|
|
|||
2
lib/libc/musl/compat/time32/lstat_time32.c
vendored
2
lib/libc/musl/compat/time32/lstat_time32.c
vendored
|
|
@ -13,5 +13,3 @@ int __lstat_time32(const char *restrict path, struct stat32 *restrict st32)
|
|||
if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim));
|
||||
return r;
|
||||
}
|
||||
|
||||
weak_alias(lstat, lstat64);
|
||||
|
|
|
|||
2
lib/libc/musl/compat/time32/stat_time32.c
vendored
2
lib/libc/musl/compat/time32/stat_time32.c
vendored
|
|
@ -13,5 +13,3 @@ int __stat_time32(const char *restrict path, struct stat32 *restrict st32)
|
|||
if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim));
|
||||
return r;
|
||||
}
|
||||
|
||||
weak_alias(stat, stat64);
|
||||
|
|
|
|||
2
lib/libc/musl/include/aio.h
vendored
2
lib/libc/musl/include/aio.h
vendored
|
|
@ -49,7 +49,7 @@ int aio_fsync(int, struct aiocb *);
|
|||
|
||||
int lio_listio(int, struct aiocb *__restrict const *__restrict, int, struct sigevent *__restrict);
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define aiocb64 aiocb
|
||||
#define aio_read64 aio_read
|
||||
#define aio_write64 aio_write
|
||||
|
|
|
|||
71
lib/libc/musl/include/arpa/nameser.h
vendored
71
lib/libc/musl/include/arpa/nameser.h
vendored
|
|
@ -188,6 +188,36 @@ typedef enum __ns_type {
|
|||
ns_t_sink = 40,
|
||||
ns_t_opt = 41,
|
||||
ns_t_apl = 42,
|
||||
ns_t_ds = 43,
|
||||
ns_t_sshfp = 44,
|
||||
ns_t_ipseckey = 45,
|
||||
ns_t_rrsig = 46,
|
||||
ns_t_nsec = 47,
|
||||
ns_t_dnskey = 48,
|
||||
ns_t_dhcid = 49,
|
||||
ns_t_nsec3 = 50,
|
||||
ns_t_nsec3param = 51,
|
||||
ns_t_tlsa = 52,
|
||||
ns_t_smimea = 53,
|
||||
ns_t_hip = 55,
|
||||
ns_t_ninfo = 56,
|
||||
ns_t_rkey = 57,
|
||||
ns_t_talink = 58,
|
||||
ns_t_cds = 59,
|
||||
ns_t_cdnskey = 60,
|
||||
ns_t_openpgpkey = 61,
|
||||
ns_t_csync = 62,
|
||||
ns_t_spf = 99,
|
||||
ns_t_uinfo = 100,
|
||||
ns_t_uid = 101,
|
||||
ns_t_gid = 102,
|
||||
ns_t_unspec = 103,
|
||||
ns_t_nid = 104,
|
||||
ns_t_l32 = 105,
|
||||
ns_t_l64 = 106,
|
||||
ns_t_lp = 107,
|
||||
ns_t_eui48 = 108,
|
||||
ns_t_eui64 = 109,
|
||||
ns_t_tkey = 249,
|
||||
ns_t_tsig = 250,
|
||||
ns_t_ixfr = 251,
|
||||
|
|
@ -196,6 +226,11 @@ typedef enum __ns_type {
|
|||
ns_t_maila = 254,
|
||||
ns_t_any = 255,
|
||||
ns_t_zxfr = 256,
|
||||
ns_t_uri = 256,
|
||||
ns_t_caa = 257,
|
||||
ns_t_avc = 258,
|
||||
ns_t_ta = 32768,
|
||||
ns_t_dlv = 32769,
|
||||
ns_t_max = 65536
|
||||
} ns_type;
|
||||
|
||||
|
|
@ -430,12 +465,48 @@ typedef struct {
|
|||
#define T_NAPTR ns_t_naptr
|
||||
#define T_A6 ns_t_a6
|
||||
#define T_DNAME ns_t_dname
|
||||
#define T_DS ns_t_ds
|
||||
#define T_SSHFP ns_t_sshfp
|
||||
#define T_IPSECKEY ns_t_ipseckey
|
||||
#define T_RRSIG ns_t_rrsig
|
||||
#define T_NSEC ns_t_nsec
|
||||
#define T_DNSKEY ns_t_dnskey
|
||||
#define T_DHCID ns_t_dhcid
|
||||
#define T_NSEC3 ns_t_nsec3
|
||||
#define T_NSEC3PARAM ns_t_nsec3param
|
||||
#define T_TLSA ns_t_tlsa
|
||||
#define T_SMIMEA ns_t_smimea
|
||||
#define T_HIP ns_t_hip
|
||||
#define T_NINFO ns_t_ninfo
|
||||
#define T_RKEY ns_t_rkey
|
||||
#define T_TALINK ns_t_talink
|
||||
#define T_CDS ns_t_cds
|
||||
#define T_CDNSKEY ns_t_cdnskey
|
||||
#define T_OPENPGPKEY ns_t_openpgpkey
|
||||
#define T_CSYNC ns_t_csync
|
||||
#define T_SPF ns_t_spf
|
||||
#define T_UINFO ns_t_uinfo
|
||||
#define T_UID ns_t_uid
|
||||
#define T_GID ns_t_gid
|
||||
#define T_UNSPEC ns_t_unspec
|
||||
#define T_NID ns_t_nid
|
||||
#define T_L32 ns_t_l32
|
||||
#define T_L64 ns_t_l64
|
||||
#define T_LP ns_t_lp
|
||||
#define T_EUI48 ns_t_eui48
|
||||
#define T_EUI64 ns_t_eui64
|
||||
#define T_TKEY ns_t_tkey
|
||||
#define T_TSIG ns_t_tsig
|
||||
#define T_IXFR ns_t_ixfr
|
||||
#define T_AXFR ns_t_axfr
|
||||
#define T_MAILB ns_t_mailb
|
||||
#define T_MAILA ns_t_maila
|
||||
#define T_ANY ns_t_any
|
||||
#define T_URI ns_t_uri
|
||||
#define T_CAA ns_t_caa
|
||||
#define T_AVC ns_t_avc
|
||||
#define T_TA ns_t_ta
|
||||
#define T_DLV ns_t_dlv
|
||||
|
||||
#define C_IN ns_c_in
|
||||
#define C_CHAOS ns_c_chaos
|
||||
|
|
|
|||
2
lib/libc/musl/include/dirent.h
vendored
2
lib/libc/musl/include/dirent.h
vendored
|
|
@ -56,7 +56,7 @@ int getdents(int, struct dirent *, size_t);
|
|||
int versionsort(const struct dirent **, const struct dirent **);
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define dirent64 dirent
|
||||
#define readdir64 readdir
|
||||
#define readdir64_r readdir_r
|
||||
|
|
|
|||
9
lib/libc/musl/include/elf.h
vendored
9
lib/libc/musl/include/elf.h
vendored
|
|
@ -385,7 +385,8 @@ typedef struct {
|
|||
#define SHT_PREINIT_ARRAY 16
|
||||
#define SHT_GROUP 17
|
||||
#define SHT_SYMTAB_SHNDX 18
|
||||
#define SHT_NUM 19
|
||||
#define SHT_RELR 19
|
||||
#define SHT_NUM 20
|
||||
#define SHT_LOOS 0x60000000
|
||||
#define SHT_GNU_ATTRIBUTES 0x6ffffff5
|
||||
#define SHT_GNU_HASH 0x6ffffff6
|
||||
|
|
@ -436,6 +437,7 @@ typedef struct {
|
|||
} Elf64_Chdr;
|
||||
|
||||
#define ELFCOMPRESS_ZLIB 1
|
||||
#define ELFCOMPRESS_ZSTD 2
|
||||
#define ELFCOMPRESS_LOOS 0x60000000
|
||||
#define ELFCOMPRESS_HIOS 0x6fffffff
|
||||
#define ELFCOMPRESS_LOPROC 0x70000000
|
||||
|
|
@ -754,7 +756,10 @@ typedef struct {
|
|||
#define DT_PREINIT_ARRAY 32
|
||||
#define DT_PREINIT_ARRAYSZ 33
|
||||
#define DT_SYMTAB_SHNDX 34
|
||||
#define DT_NUM 35
|
||||
#define DT_RELRSZ 35
|
||||
#define DT_RELR 36
|
||||
#define DT_RELRENT 37
|
||||
#define DT_NUM 38
|
||||
#define DT_LOOS 0x6000000d
|
||||
#define DT_HIOS 0x6ffff000
|
||||
#define DT_LOPROC 0x70000000
|
||||
|
|
|
|||
2
lib/libc/musl/include/fcntl.h
vendored
2
lib/libc/musl/include/fcntl.h
vendored
|
|
@ -195,7 +195,7 @@ ssize_t tee(int, int, size_t, unsigned);
|
|||
#define loff_t off_t
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define F_GETLK64 F_GETLK
|
||||
#define F_SETLK64 F_SETLK
|
||||
#define F_SETLKW64 F_SETLKW
|
||||
|
|
|
|||
2
lib/libc/musl/include/ftw.h
vendored
2
lib/libc/musl/include/ftw.h
vendored
|
|
@ -29,7 +29,7 @@ struct FTW {
|
|||
int ftw(const char *, int (*)(const char *, const struct stat *, int), int);
|
||||
int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int);
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define ftw64 ftw
|
||||
#define nftw64 nftw
|
||||
#endif
|
||||
|
|
|
|||
2
lib/libc/musl/include/glob.h
vendored
2
lib/libc/musl/include/glob.h
vendored
|
|
@ -39,7 +39,7 @@ void globfree(glob_t *);
|
|||
#define GLOB_NOMATCH 3
|
||||
#define GLOB_NOSYS 4
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define glob64 glob
|
||||
#define globfree64 globfree
|
||||
#define glob64_t glob_t
|
||||
|
|
|
|||
1
lib/libc/musl/include/netdb.h
vendored
1
lib/libc/musl/include/netdb.h
vendored
|
|
@ -44,6 +44,7 @@ struct addrinfo {
|
|||
#define EAI_NONAME -2
|
||||
#define EAI_AGAIN -3
|
||||
#define EAI_FAIL -4
|
||||
#define EAI_NODATA -5
|
||||
#define EAI_FAMILY -6
|
||||
#define EAI_SOCKTYPE -7
|
||||
#define EAI_SERVICE -8
|
||||
|
|
|
|||
2
lib/libc/musl/include/sched.h
vendored
2
lib/libc/musl/include/sched.h
vendored
|
|
@ -124,7 +124,7 @@ __CPU_op_func_S(XOR, ^)
|
|||
#define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n)))
|
||||
#define CPU_FREE(set) free(set)
|
||||
|
||||
#define CPU_SETSIZE 128
|
||||
#define CPU_SETSIZE 1024
|
||||
|
||||
#define CPU_SET(i, set) CPU_SET_S(i,sizeof(cpu_set_t),set)
|
||||
#define CPU_CLR(i, set) CPU_CLR_S(i,sizeof(cpu_set_t),set)
|
||||
|
|
|
|||
2
lib/libc/musl/include/stdio.h
vendored
2
lib/libc/musl/include/stdio.h
vendored
|
|
@ -205,7 +205,7 @@ typedef struct _IO_cookie_io_functions_t {
|
|||
FILE *fopencookie(void *, const char *, cookie_io_functions_t);
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define tmpfile64 tmpfile
|
||||
#define fopen64 fopen
|
||||
#define freopen64 freopen
|
||||
|
|
|
|||
4
lib/libc/musl/include/stdlib.h
vendored
4
lib/libc/musl/include/stdlib.h
vendored
|
|
@ -95,7 +95,7 @@ size_t __ctype_get_mb_cur_max(void);
|
|||
#define WTERMSIG(s) ((s) & 0x7f)
|
||||
#define WSTOPSIG(s) WEXITSTATUS(s)
|
||||
#define WIFEXITED(s) (!WTERMSIG(s))
|
||||
#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00)
|
||||
#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00)
|
||||
#define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu)
|
||||
|
||||
int posix_memalign (void **, size_t, size_t);
|
||||
|
|
@ -163,7 +163,7 @@ double strtod_l(const char *__restrict, char **__restrict, struct __locale_struc
|
|||
long double strtold_l(const char *__restrict, char **__restrict, struct __locale_struct *);
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define mkstemp64 mkstemp
|
||||
#define mkostemp64 mkostemp
|
||||
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
||||
|
|
|
|||
2
lib/libc/musl/include/string.h
vendored
2
lib/libc/musl/include/string.h
vendored
|
|
@ -73,6 +73,7 @@ char *strsignal(int);
|
|||
char *strerror_l (int, locale_t);
|
||||
int strcoll_l (const char *, const char *, locale_t);
|
||||
size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t);
|
||||
void *memmem(const void *, size_t, const void *, size_t);
|
||||
#endif
|
||||
|
||||
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
||||
|
|
@ -92,7 +93,6 @@ void explicit_bzero (void *, size_t);
|
|||
int strverscmp (const char *, const char *);
|
||||
char *strchrnul(const char *, int);
|
||||
char *strcasestr(const char *, const char *);
|
||||
void *memmem(const void *, size_t, const void *, size_t);
|
||||
void *memrchr(const void *, int, size_t);
|
||||
void *mempcpy(void *, const void *, size_t);
|
||||
#ifndef __cplusplus
|
||||
|
|
|
|||
1
lib/libc/musl/include/strings.h
vendored
1
lib/libc/musl/include/strings.h
vendored
|
|
@ -5,6 +5,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define __NEED_size_t
|
||||
#define __NEED_locale_t
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/mman.h
vendored
2
lib/libc/musl/include/sys/mman.h
vendored
|
|
@ -141,7 +141,7 @@ int mincore (void *, size_t, unsigned char *);
|
|||
int shm_open (const char *, int, mode_t);
|
||||
int shm_unlink (const char *);
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define mmap64 mmap
|
||||
#define off64_t off_t
|
||||
#endif
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/resource.h
vendored
2
lib/libc/musl/include/sys/resource.h
vendored
|
|
@ -95,7 +95,7 @@ int prlimit(pid_t, int, const struct rlimit *, struct rlimit *);
|
|||
|
||||
#define RLIM_NLIMITS RLIMIT_NLIMITS
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define RLIM64_INFINITY RLIM_INFINITY
|
||||
#define RLIM64_SAVED_CUR RLIM_SAVED_CUR
|
||||
#define RLIM64_SAVED_MAX RLIM_SAVED_MAX
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/sendfile.h
vendored
2
lib/libc/musl/include/sys/sendfile.h
vendored
|
|
@ -10,7 +10,7 @@ extern "C" {
|
|||
|
||||
ssize_t sendfile(int, int, off_t *, size_t);
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define sendfile64 sendfile
|
||||
#define off64_t off_t
|
||||
#endif
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/stat.h
vendored
2
lib/libc/musl/include/sys/stat.h
vendored
|
|
@ -98,7 +98,7 @@ int lchmod(const char *, mode_t);
|
|||
#define S_IEXEC S_IXUSR
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define stat64 stat
|
||||
#define fstat64 fstat
|
||||
#define lstat64 lstat
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/statfs.h
vendored
2
lib/libc/musl/include/sys/statfs.h
vendored
|
|
@ -18,7 +18,7 @@ typedef struct __fsid_t {
|
|||
int statfs (const char *, struct statfs *);
|
||||
int fstatfs (int, struct statfs *);
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define statfs64 statfs
|
||||
#define fstatfs64 fstatfs
|
||||
#define fsblkcnt64_t fsblkcnt_t
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/statvfs.h
vendored
2
lib/libc/musl/include/sys/statvfs.h
vendored
|
|
@ -42,7 +42,7 @@ int fstatvfs (int, struct statvfs *);
|
|||
#define ST_NODIRATIME 2048
|
||||
#define ST_RELATIME 4096
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define statvfs64 statvfs
|
||||
#define fstatvfs64 fstatvfs
|
||||
#define fsblkcnt64_t fsblkcnt_t
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/types.h
vendored
2
lib/libc/musl/include/sys/types.h
vendored
|
|
@ -71,7 +71,7 @@ typedef unsigned long long u_quad_t;
|
|||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define blkcnt64_t blkcnt_t
|
||||
#define fsblkcnt64_t fsblkcnt_t
|
||||
#define fsfilcnt64_t fsfilcnt_t
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/uio.h
vendored
2
lib/libc/musl/include/sys/uio.h
vendored
|
|
@ -29,7 +29,7 @@ ssize_t writev (int, const struct iovec *, int);
|
|||
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
||||
ssize_t preadv (int, const struct iovec *, int, off_t);
|
||||
ssize_t pwritev (int, const struct iovec *, int, off_t);
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define preadv64 preadv
|
||||
#define pwritev64 pwritev
|
||||
#define off64_t off_t
|
||||
|
|
|
|||
2
lib/libc/musl/include/sys/wait.h
vendored
2
lib/libc/musl/include/sys/wait.h
vendored
|
|
@ -50,7 +50,7 @@ pid_t wait4 (pid_t, int *, int, struct rusage *);
|
|||
#define WSTOPSIG(s) WEXITSTATUS(s)
|
||||
#define WCOREDUMP(s) ((s) & 0x80)
|
||||
#define WIFEXITED(s) (!WTERMSIG(s))
|
||||
#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00)
|
||||
#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00)
|
||||
#define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu)
|
||||
#define WIFCONTINUED(s) ((s) == 0xffff)
|
||||
|
||||
|
|
|
|||
6
lib/libc/musl/include/unistd.h
vendored
6
lib/libc/musl/include/unistd.h
vendored
|
|
@ -198,7 +198,7 @@ ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned);
|
|||
pid_t gettid(void);
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
|
||||
#if defined(_LARGEFILE64_SOURCE)
|
||||
#define lseek64 lseek
|
||||
#define pread64 pread
|
||||
#define pwrite64 pwrite
|
||||
|
|
@ -425,6 +425,8 @@ pid_t gettid(void);
|
|||
#define _SC_XOPEN_STREAMS 246
|
||||
#define _SC_THREAD_ROBUST_PRIO_INHERIT 247
|
||||
#define _SC_THREAD_ROBUST_PRIO_PROTECT 248
|
||||
#define _SC_MINSIGSTKSZ 249
|
||||
#define _SC_SIGSTKSZ 250
|
||||
|
||||
#define _CS_PATH 0
|
||||
#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS 1
|
||||
|
|
@ -467,6 +469,8 @@ pid_t gettid(void);
|
|||
#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS 1147
|
||||
#define _CS_V6_ENV 1148
|
||||
#define _CS_V7_ENV 1149
|
||||
#define _CS_POSIX_V7_THREADS_CFLAGS 1150
|
||||
#define _CS_POSIX_V7_THREADS_LDFLAGS 1151
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
32
lib/libc/musl/src/aio/aio.c
vendored
32
lib/libc/musl/src/aio/aio.c
vendored
|
|
@ -82,6 +82,8 @@ static size_t io_thread_stack_size;
|
|||
|
||||
static struct aio_queue *__aio_get_queue(int fd, int need)
|
||||
{
|
||||
sigset_t allmask, origmask;
|
||||
int masked = 0;
|
||||
if (fd < 0) {
|
||||
errno = EBADF;
|
||||
return 0;
|
||||
|
|
@ -93,6 +95,9 @@ static struct aio_queue *__aio_get_queue(int fd, int need)
|
|||
if ((!map || !map[a] || !map[a][b] || !map[a][b][c] || !(q=map[a][b][c][d])) && need) {
|
||||
pthread_rwlock_unlock(&maplock);
|
||||
if (fcntl(fd, F_GETFD) < 0) return 0;
|
||||
sigfillset(&allmask);
|
||||
masked = 1;
|
||||
pthread_sigmask(SIG_BLOCK, &allmask, &origmask);
|
||||
pthread_rwlock_wrlock(&maplock);
|
||||
if (!io_thread_stack_size) {
|
||||
unsigned long val = __getauxval(AT_MINSIGSTKSZ);
|
||||
|
|
@ -119,6 +124,7 @@ static struct aio_queue *__aio_get_queue(int fd, int need)
|
|||
if (q) pthread_mutex_lock(&q->lock);
|
||||
out:
|
||||
pthread_rwlock_unlock(&maplock);
|
||||
if (masked) pthread_sigmask(SIG_SETMASK, &origmask, 0);
|
||||
return q;
|
||||
}
|
||||
|
||||
|
|
@ -401,18 +407,26 @@ void __aio_atfork(int who)
|
|||
if (who<0) {
|
||||
pthread_rwlock_rdlock(&maplock);
|
||||
return;
|
||||
} else if (!who) {
|
||||
pthread_rwlock_unlock(&maplock);
|
||||
return;
|
||||
}
|
||||
if (who>0 && map) for (int a=0; a<(-1U/2+1)>>24; a++)
|
||||
aio_fd_cnt = 0;
|
||||
if (pthread_rwlock_tryrdlock(&maplock)) {
|
||||
/* Obtaining lock may fail if _Fork was called nor via
|
||||
* fork. In this case, no further aio is possible from
|
||||
* child and we can just null out map so __aio_close
|
||||
* does not attempt to do anything. */
|
||||
map = 0;
|
||||
return;
|
||||
}
|
||||
if (map) for (int a=0; a<(-1U/2+1)>>24; a++)
|
||||
if (map[a]) for (int b=0; b<256; b++)
|
||||
if (map[a][b]) for (int c=0; c<256; c++)
|
||||
if (map[a][b][c]) for (int d=0; d<256; d++)
|
||||
map[a][b][c][d] = 0;
|
||||
pthread_rwlock_unlock(&maplock);
|
||||
/* Re-initialize the rwlock rather than unlocking since there
|
||||
* may have been more than one reference on it in the parent.
|
||||
* We are not a lock holder anyway; the thread in the parent was. */
|
||||
pthread_rwlock_init(&maplock, 0);
|
||||
}
|
||||
|
||||
weak_alias(aio_cancel, aio_cancel64);
|
||||
weak_alias(aio_error, aio_error64);
|
||||
weak_alias(aio_fsync, aio_fsync64);
|
||||
weak_alias(aio_read, aio_read64);
|
||||
weak_alias(aio_write, aio_write64);
|
||||
weak_alias(aio_return, aio_return64);
|
||||
|
|
|
|||
6
lib/libc/musl/src/aio/aio_suspend.c
vendored
6
lib/libc/musl/src/aio/aio_suspend.c
vendored
|
|
@ -9,7 +9,7 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec
|
|||
{
|
||||
int i, tid = 0, ret, expect = 0;
|
||||
struct timespec at;
|
||||
volatile int dummy_fut, *pfut;
|
||||
volatile int dummy_fut = 0, *pfut;
|
||||
int nzcnt = 0;
|
||||
const struct aiocb *cb = 0;
|
||||
|
||||
|
|
@ -73,7 +73,3 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if !_REDIR_TIME64
|
||||
weak_alias(aio_suspend, aio_suspend64);
|
||||
#endif
|
||||
|
|
|
|||
2
lib/libc/musl/src/aio/lio_listio.c
vendored
2
lib/libc/musl/src/aio/lio_listio.c
vendored
|
|
@ -139,5 +139,3 @@ int lio_listio(int mode, struct aiocb *restrict const *restrict cbs, int cnt, st
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias(lio_listio, lio_listio64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/conf/confstr.c
vendored
2
lib/libc/musl/src/conf/confstr.c
vendored
|
|
@ -7,7 +7,7 @@ size_t confstr(int name, char *buf, size_t len)
|
|||
const char *s = "";
|
||||
if (!name) {
|
||||
s = "/bin:/usr/bin";
|
||||
} else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>33U) {
|
||||
} else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>35U) {
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
13
lib/libc/musl/src/conf/sysconf.c
vendored
13
lib/libc/musl/src/conf/sysconf.c
vendored
|
|
@ -4,6 +4,7 @@
|
|||
#include <sys/resource.h>
|
||||
#include <signal.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/auxv.h>
|
||||
#include "syscall.h"
|
||||
#include "libc.h"
|
||||
|
||||
|
|
@ -19,6 +20,8 @@
|
|||
#define JT_AVPHYS_PAGES JT(9)
|
||||
#define JT_ZERO JT(10)
|
||||
#define JT_DELAYTIMER_MAX JT(11)
|
||||
#define JT_MINSIGSTKSZ JT(12)
|
||||
#define JT_SIGSTKSZ JT(13)
|
||||
|
||||
#define RLIM(x) (-32768|(RLIMIT_ ## x))
|
||||
|
||||
|
|
@ -165,6 +168,9 @@ long sysconf(int name)
|
|||
[_SC_XOPEN_STREAMS] = JT_ZERO,
|
||||
[_SC_THREAD_ROBUST_PRIO_INHERIT] = -1,
|
||||
[_SC_THREAD_ROBUST_PRIO_PROTECT] = -1,
|
||||
|
||||
[_SC_MINSIGSTKSZ] = JT_MINSIGSTKSZ,
|
||||
[_SC_SIGSTKSZ] = JT_SIGSTKSZ,
|
||||
};
|
||||
|
||||
if (name >= sizeof(values)/sizeof(values[0]) || !values[name]) {
|
||||
|
|
@ -212,6 +218,13 @@ long sysconf(int name)
|
|||
mem *= si.mem_unit;
|
||||
mem /= PAGE_SIZE;
|
||||
return (mem > LONG_MAX) ? LONG_MAX : mem;
|
||||
case JT_MINSIGSTKSZ & 255:
|
||||
case JT_SIGSTKSZ & 255: ;
|
||||
long val = __getauxval(AT_MINSIGSTKSZ);
|
||||
if (val < MINSIGSTKSZ) val = MINSIGSTKSZ;
|
||||
if (values[name] == JT_SIGSTKSZ)
|
||||
val += SIGSTKSZ - MINSIGSTKSZ;
|
||||
return val;
|
||||
case JT_ZERO & 255:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
2
lib/libc/musl/src/dirent/alphasort.c
vendored
2
lib/libc/musl/src/dirent/alphasort.c
vendored
|
|
@ -5,5 +5,3 @@ int alphasort(const struct dirent **a, const struct dirent **b)
|
|||
{
|
||||
return strcoll((*a)->d_name, (*b)->d_name);
|
||||
}
|
||||
|
||||
weak_alias(alphasort, alphasort64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/dirent/readdir.c
vendored
2
lib/libc/musl/src/dirent/readdir.c
vendored
|
|
@ -25,5 +25,3 @@ struct dirent *readdir(DIR *dir)
|
|||
dir->tell = de->d_off;
|
||||
return de;
|
||||
}
|
||||
|
||||
weak_alias(readdir, readdir64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/dirent/readdir_r.c
vendored
2
lib/libc/musl/src/dirent/readdir_r.c
vendored
|
|
@ -25,5 +25,3 @@ int readdir_r(DIR *restrict dir, struct dirent *restrict buf, struct dirent **re
|
|||
*result = buf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias(readdir_r, readdir64_r);
|
||||
|
|
|
|||
2
lib/libc/musl/src/dirent/scandir.c
vendored
2
lib/libc/musl/src/dirent/scandir.c
vendored
|
|
@ -43,5 +43,3 @@ int scandir(const char *path, struct dirent ***res,
|
|||
*res = names;
|
||||
return cnt;
|
||||
}
|
||||
|
||||
weak_alias(scandir, scandir64);
|
||||
|
|
|
|||
3
lib/libc/musl/src/dirent/versionsort.c
vendored
3
lib/libc/musl/src/dirent/versionsort.c
vendored
|
|
@ -6,6 +6,3 @@ int versionsort(const struct dirent **a, const struct dirent **b)
|
|||
{
|
||||
return strverscmp((*a)->d_name, (*b)->d_name);
|
||||
}
|
||||
|
||||
#undef versionsort64
|
||||
weak_alias(versionsort, versionsort64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/fcntl/creat.c
vendored
2
lib/libc/musl/src/fcntl/creat.c
vendored
|
|
@ -4,5 +4,3 @@ int creat(const char *filename, mode_t mode)
|
|||
{
|
||||
return open(filename, O_CREAT|O_WRONLY|O_TRUNC, mode);
|
||||
}
|
||||
|
||||
weak_alias(creat, creat64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/fcntl/open.c
vendored
2
lib/libc/musl/src/fcntl/open.c
vendored
|
|
@ -19,5 +19,3 @@ int open(const char *filename, int flags, ...)
|
|||
|
||||
return __syscall_ret(fd);
|
||||
}
|
||||
|
||||
weak_alias(open, open64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/fcntl/openat.c
vendored
2
lib/libc/musl/src/fcntl/openat.c
vendored
|
|
@ -15,5 +15,3 @@ int openat(int fd, const char *filename, int flags, ...)
|
|||
|
||||
return syscall_cp(SYS_openat, fd, filename, flags|O_LARGEFILE, mode);
|
||||
}
|
||||
|
||||
weak_alias(openat, openat64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/fcntl/posix_fadvise.c
vendored
2
lib/libc/musl/src/fcntl/posix_fadvise.c
vendored
|
|
@ -14,5 +14,3 @@ int posix_fadvise(int fd, off_t base, off_t len, int advice)
|
|||
__SYSCALL_LL_E(len), advice);
|
||||
#endif
|
||||
}
|
||||
|
||||
weak_alias(posix_fadvise, posix_fadvise64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/fcntl/posix_fallocate.c
vendored
2
lib/libc/musl/src/fcntl/posix_fallocate.c
vendored
|
|
@ -6,5 +6,3 @@ int posix_fallocate(int fd, off_t base, off_t len)
|
|||
return -__syscall(SYS_fallocate, fd, 0, __SYSCALL_LL_E(base),
|
||||
__SYSCALL_LL_E(len));
|
||||
}
|
||||
|
||||
weak_alias(posix_fallocate, posix_fallocate64);
|
||||
|
|
|
|||
9
lib/libc/musl/src/include/sys/stat.h
vendored
Normal file
9
lib/libc/musl/src/include/sys/stat.h
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef SYS_STAT_H
|
||||
#define SYS_STAT_H
|
||||
|
||||
#include "../../../include/sys/stat.h"
|
||||
|
||||
hidden int __fstat(int, struct stat *);
|
||||
hidden int __fstatat(int, const char *restrict, struct stat *restrict, int);
|
||||
|
||||
#endif
|
||||
6
lib/libc/musl/src/internal/dynlink.h
vendored
6
lib/libc/musl/src/internal/dynlink.h
vendored
|
|
@ -92,8 +92,12 @@ struct fdpic_dummy_loadmap {
|
|||
#define DT_DEBUG_INDIRECT 0
|
||||
#endif
|
||||
|
||||
#ifndef DT_DEBUG_INDIRECT_REL
|
||||
#define DT_DEBUG_INDIRECT_REL 0
|
||||
#endif
|
||||
|
||||
#define AUX_CNT 32
|
||||
#define DYN_CNT 32
|
||||
#define DYN_CNT 37
|
||||
|
||||
typedef void (*stage2_func)(unsigned char *, size_t *);
|
||||
|
||||
|
|
|
|||
2
lib/libc/musl/src/internal/fork_impl.h
vendored
2
lib/libc/musl/src/internal/fork_impl.h
vendored
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
extern hidden volatile int *const __at_quick_exit_lockptr;
|
||||
extern hidden volatile int *const __atexit_lockptr;
|
||||
extern hidden volatile int *const __dlerror_lockptr;
|
||||
extern hidden volatile int *const __gettext_lockptr;
|
||||
extern hidden volatile int *const __locale_lockptr;
|
||||
extern hidden volatile int *const __random_lockptr;
|
||||
|
|
@ -17,3 +16,4 @@ extern hidden volatile int *const __vmlock_lockptr;
|
|||
|
||||
hidden void __malloc_atfork(int);
|
||||
hidden void __ldso_atfork(int);
|
||||
hidden void __pthread_key_atfork(int);
|
||||
|
|
|
|||
5
lib/libc/musl/src/internal/ksigaction.h
vendored
5
lib/libc/musl/src/internal/ksigaction.h
vendored
|
|
@ -6,8 +6,13 @@
|
|||
struct k_sigaction {
|
||||
void (*handler)(int);
|
||||
unsigned long flags;
|
||||
#ifdef SA_RESTORER
|
||||
void (*restorer)(void);
|
||||
#endif
|
||||
unsigned mask[2];
|
||||
#ifndef SA_RESTORER
|
||||
void *unused;
|
||||
#endif
|
||||
};
|
||||
|
||||
hidden void __restore(), __restore_rt();
|
||||
|
|
|
|||
26
lib/libc/musl/src/internal/syscall.h
vendored
26
lib/libc/musl/src/internal/syscall.h
vendored
|
|
@ -58,7 +58,7 @@ hidden long __syscall_ret(unsigned long),
|
|||
#define __syscall_cp(...) __SYSCALL_DISP(__syscall_cp,__VA_ARGS__)
|
||||
#define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__))
|
||||
|
||||
static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, long c, long d, long e, long f)
|
||||
static inline long __alt_socketcall(int sys, int sock, int cp, syscall_arg_t a, syscall_arg_t b, syscall_arg_t c, syscall_arg_t d, syscall_arg_t e, syscall_arg_t f)
|
||||
{
|
||||
long r;
|
||||
if (cp) r = __syscall_cp(sys, a, b, c, d, e, f);
|
||||
|
|
@ -71,9 +71,9 @@ static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, l
|
|||
return r;
|
||||
}
|
||||
#define __socketcall(nm, a, b, c, d, e, f) __alt_socketcall(SYS_##nm, __SC_##nm, 0, \
|
||||
(long)(a), (long)(b), (long)(c), (long)(d), (long)(e), (long)(f))
|
||||
__scc(a), __scc(b), __scc(c), __scc(d), __scc(e), __scc(f))
|
||||
#define __socketcall_cp(nm, a, b, c, d, e, f) __alt_socketcall(SYS_##nm, __SC_##nm, 1, \
|
||||
(long)(a), (long)(b), (long)(c), (long)(d), (long)(e), (long)(f))
|
||||
__scc(a), __scc(b), __scc(c), __scc(d), __scc(e), __scc(f))
|
||||
|
||||
/* fixup legacy 16-bit junk */
|
||||
|
||||
|
|
@ -201,43 +201,43 @@ static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, l
|
|||
#define SYS_sendfile SYS_sendfile64
|
||||
#endif
|
||||
|
||||
#ifndef SYS_timer_settime
|
||||
#ifdef SYS_timer_settime32
|
||||
#define SYS_timer_settime SYS_timer_settime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_timer_gettime
|
||||
#ifdef SYS_timer_gettime32
|
||||
#define SYS_timer_gettime SYS_timer_gettime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_timerfd_settime
|
||||
#ifdef SYS_timerfd_settime32
|
||||
#define SYS_timerfd_settime SYS_timerfd_settime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_timerfd_gettime
|
||||
#ifdef SYS_timerfd_gettime32
|
||||
#define SYS_timerfd_gettime SYS_timerfd_gettime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_clock_settime
|
||||
#ifdef SYS_clock_settime32
|
||||
#define SYS_clock_settime SYS_clock_settime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_clock_gettime
|
||||
#ifdef SYS_clock_gettime32
|
||||
#define SYS_clock_gettime SYS_clock_gettime32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_clock_getres
|
||||
#ifdef SYS_clock_getres_time32
|
||||
#define SYS_clock_getres SYS_clock_getres_time32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_clock_nanosleep
|
||||
#ifdef SYS_clock_nanosleep_time32
|
||||
#define SYS_clock_nanosleep SYS_clock_nanosleep_time32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_gettimeofday
|
||||
#ifdef SYS_gettimeofday_time32
|
||||
#define SYS_gettimeofday SYS_gettimeofday_time32
|
||||
#endif
|
||||
|
||||
#ifndef SYS_settimeofday
|
||||
#ifdef SYS_settimeofday_time32
|
||||
#define SYS_settimeofday SYS_settimeofday_time32
|
||||
#endif
|
||||
|
||||
|
|
|
|||
2
lib/libc/musl/src/internal/version.h
vendored
2
lib/libc/musl/src/internal/version.h
vendored
|
|
@ -1 +1 @@
|
|||
#define VERSION "1.2.3"
|
||||
#define VERSION "1.2.4"
|
||||
|
|
|
|||
3
lib/libc/musl/src/ipc/semtimedop.c
vendored
3
lib/libc/musl/src/ipc/semtimedop.c
vendored
|
|
@ -7,7 +7,8 @@
|
|||
#define IS32BIT(x) !((x)+0x80000000ULL>>32)
|
||||
#define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63))
|
||||
|
||||
#if !defined(SYS_semtimedop) && !defined(SYS_ipc)
|
||||
#if !defined(SYS_semtimedop) && !defined(SYS_ipc) || \
|
||||
SYS_semtimedop == SYS_semtimedop_time64
|
||||
#define NO_TIME32 1
|
||||
#else
|
||||
#define NO_TIME32 0
|
||||
|
|
|
|||
34
lib/libc/musl/src/ldso/dlerror.c
vendored
34
lib/libc/musl/src/ldso/dlerror.c
vendored
|
|
@ -3,8 +3,7 @@
|
|||
#include <stdarg.h>
|
||||
#include "pthread_impl.h"
|
||||
#include "dynlink.h"
|
||||
#include "lock.h"
|
||||
#include "fork_impl.h"
|
||||
#include "atomic.h"
|
||||
|
||||
#define malloc __libc_malloc
|
||||
#define calloc __libc_calloc
|
||||
|
|
@ -23,28 +22,31 @@ char *dlerror()
|
|||
return s;
|
||||
}
|
||||
|
||||
static volatile int freebuf_queue_lock[1];
|
||||
static void **freebuf_queue;
|
||||
volatile int *const __dlerror_lockptr = freebuf_queue_lock;
|
||||
/* Atomic singly-linked list, used to store list of thread-local dlerror
|
||||
* buffers for deferred free. They cannot be freed at thread exit time
|
||||
* because, by the time it's known they can be freed, the exiting thread
|
||||
* is in a highly restrictive context where it cannot call (even the
|
||||
* libc-internal) free. It also can't take locks; thus the atomic list. */
|
||||
|
||||
static void *volatile freebuf_queue;
|
||||
|
||||
void __dl_thread_cleanup(void)
|
||||
{
|
||||
pthread_t self = __pthread_self();
|
||||
if (self->dlerror_buf && self->dlerror_buf != (void *)-1) {
|
||||
LOCK(freebuf_queue_lock);
|
||||
void **p = (void **)self->dlerror_buf;
|
||||
*p = freebuf_queue;
|
||||
freebuf_queue = p;
|
||||
UNLOCK(freebuf_queue_lock);
|
||||
}
|
||||
if (!self->dlerror_buf || self->dlerror_buf == (void *)-1)
|
||||
return;
|
||||
void *h;
|
||||
do {
|
||||
h = freebuf_queue;
|
||||
*(void **)self->dlerror_buf = h;
|
||||
} while (a_cas_p(&freebuf_queue, h, self->dlerror_buf) != h);
|
||||
}
|
||||
|
||||
hidden void __dl_vseterr(const char *fmt, va_list ap)
|
||||
{
|
||||
LOCK(freebuf_queue_lock);
|
||||
void **q = freebuf_queue;
|
||||
freebuf_queue = 0;
|
||||
UNLOCK(freebuf_queue_lock);
|
||||
void **q;
|
||||
do q = freebuf_queue;
|
||||
while (q && a_cas_p(&freebuf_queue, q, 0) != q);
|
||||
|
||||
while (q) {
|
||||
void **p = *q;
|
||||
|
|
|
|||
2
lib/libc/musl/src/legacy/ftw.c
vendored
2
lib/libc/musl/src/legacy/ftw.c
vendored
|
|
@ -7,5 +7,3 @@ int ftw(const char *path, int (*fn)(const char *, const struct stat *, int), int
|
|||
* actually undefined, but works on all real-world machines. */
|
||||
return nftw(path, (int (*)())fn, fd_limit, FTW_PHYS);
|
||||
}
|
||||
|
||||
weak_alias(ftw, ftw64);
|
||||
|
|
|
|||
1
lib/libc/musl/src/linux/epoll.c
vendored
1
lib/libc/musl/src/linux/epoll.c
vendored
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
int epoll_create(int size)
|
||||
{
|
||||
if (size<=0) return __syscall_ret(-EINVAL);
|
||||
return epoll_create1(0);
|
||||
}
|
||||
|
||||
|
|
|
|||
3
lib/libc/musl/src/linux/fallocate.c
vendored
3
lib/libc/musl/src/linux/fallocate.c
vendored
|
|
@ -7,6 +7,3 @@ int fallocate(int fd, int mode, off_t base, off_t len)
|
|||
return syscall(SYS_fallocate, fd, mode, __SYSCALL_LL_E(base),
|
||||
__SYSCALL_LL_E(len));
|
||||
}
|
||||
|
||||
#undef fallocate64
|
||||
weak_alias(fallocate, fallocate64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/linux/getdents.c
vendored
2
lib/libc/musl/src/linux/getdents.c
vendored
|
|
@ -8,5 +8,3 @@ int getdents(int fd, struct dirent *buf, size_t len)
|
|||
if (len>INT_MAX) len = INT_MAX;
|
||||
return syscall(SYS_getdents, fd, buf, len);
|
||||
}
|
||||
|
||||
weak_alias(getdents, getdents64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/linux/membarrier.c
vendored
2
lib/libc/musl/src/linux/membarrier.c
vendored
|
|
@ -35,7 +35,7 @@ int __membarrier(int cmd, int flags)
|
|||
__tl_lock();
|
||||
sem_init(&barrier_sem, 0, 0);
|
||||
struct sigaction sa = {
|
||||
.sa_flags = SA_RESTART,
|
||||
.sa_flags = SA_RESTART | SA_ONSTACK,
|
||||
.sa_handler = bcast_barrier
|
||||
};
|
||||
memset(&sa.sa_mask, -1, sizeof sa.sa_mask);
|
||||
|
|
|
|||
3
lib/libc/musl/src/linux/prlimit.c
vendored
3
lib/libc/musl/src/linux/prlimit.c
vendored
|
|
@ -21,6 +21,3 @@ int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlim
|
|||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
#undef prlimit64
|
||||
weak_alias(prlimit, prlimit64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/linux/sendfile.c
vendored
2
lib/libc/musl/src/linux/sendfile.c
vendored
|
|
@ -5,5 +5,3 @@ ssize_t sendfile(int out_fd, int in_fd, off_t *ofs, size_t count)
|
|||
{
|
||||
return syscall(SYS_sendfile, out_fd, in_fd, ofs, count);
|
||||
}
|
||||
|
||||
weak_alias(sendfile, sendfile64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/linux/wait4.c
vendored
2
lib/libc/musl/src/linux/wait4.c
vendored
|
|
@ -12,7 +12,7 @@ pid_t wait4(pid_t pid, int *status, int options, struct rusage *ru)
|
|||
if (ru) {
|
||||
long long kru64[18];
|
||||
r = __syscall(SYS_wait4_time64, pid, status, options, kru64);
|
||||
if (!r) {
|
||||
if (r > 0) {
|
||||
ru->ru_utime = (struct timeval)
|
||||
{ .tv_sec = kru64[0], .tv_usec = kru64[1] };
|
||||
ru->ru_stime = (struct timeval)
|
||||
|
|
|
|||
2
lib/libc/musl/src/malloc/mallocng/free.c
vendored
2
lib/libc/musl/src/malloc/mallocng/free.c
vendored
|
|
@ -119,7 +119,7 @@ void free(void *p)
|
|||
if (((uintptr_t)(start-1) ^ (uintptr_t)end) >= 2*PGSZ && g->last_idx) {
|
||||
unsigned char *base = start + (-(uintptr_t)start & (PGSZ-1));
|
||||
size_t len = (end-base) & -PGSZ;
|
||||
if (len) {
|
||||
if (len && USE_MADV_FREE) {
|
||||
int e = errno;
|
||||
madvise(base, len, MADV_FREE);
|
||||
errno = e;
|
||||
|
|
|
|||
2
lib/libc/musl/src/malloc/mallocng/glue.h
vendored
2
lib/libc/musl/src/malloc/mallocng/glue.h
vendored
|
|
@ -24,6 +24,8 @@
|
|||
#define realloc __libc_realloc
|
||||
#define free __libc_free
|
||||
|
||||
#define USE_MADV_FREE 0
|
||||
|
||||
#if USE_REAL_ASSERT
|
||||
#include <assert.h>
|
||||
#else
|
||||
|
|
|
|||
2
lib/libc/musl/src/math/logf.c
vendored
2
lib/libc/musl/src/math/logf.c
vendored
|
|
@ -53,7 +53,7 @@ float logf(float x)
|
|||
tmp = ix - OFF;
|
||||
i = (tmp >> (23 - LOGF_TABLE_BITS)) % N;
|
||||
k = (int32_t)tmp >> 23; /* arithmetic shift */
|
||||
iz = ix - (tmp & 0x1ff << 23);
|
||||
iz = ix - (tmp & 0xff800000);
|
||||
invc = T[i].invc;
|
||||
logc = T[i].logc;
|
||||
z = (double_t)asfloat(iz);
|
||||
|
|
|
|||
3
lib/libc/musl/src/misc/getopt.c
vendored
3
lib/libc/musl/src/misc/getopt.c
vendored
|
|
@ -87,7 +87,8 @@ int getopt(int argc, char * const argv[], const char *optstring)
|
|||
if (optstring[i] == ':') {
|
||||
optarg = 0;
|
||||
if (optstring[i+1] != ':' || optpos) {
|
||||
optarg = argv[optind++] + optpos;
|
||||
optarg = argv[optind++];
|
||||
if (optpos) optarg += optpos;
|
||||
optpos = 0;
|
||||
}
|
||||
if (optind > argc) {
|
||||
|
|
|
|||
8
lib/libc/musl/src/misc/getrlimit.c
vendored
8
lib/libc/musl/src/misc/getrlimit.c
vendored
|
|
@ -6,12 +6,13 @@
|
|||
|
||||
int getrlimit(int resource, struct rlimit *rlim)
|
||||
{
|
||||
unsigned long k_rlim[2];
|
||||
int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim);
|
||||
if (!ret) {
|
||||
FIX(rlim->rlim_cur);
|
||||
FIX(rlim->rlim_max);
|
||||
}
|
||||
#ifdef SYS_getrlimit
|
||||
unsigned long k_rlim[2];
|
||||
if (!ret || errno != ENOSYS)
|
||||
return ret;
|
||||
if (syscall(SYS_getrlimit, resource, k_rlim) < 0)
|
||||
|
|
@ -21,6 +22,7 @@ int getrlimit(int resource, struct rlimit *rlim)
|
|||
FIX(rlim->rlim_cur);
|
||||
FIX(rlim->rlim_max);
|
||||
return 0;
|
||||
#else
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
weak_alias(getrlimit, getrlimit64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/misc/lockf.c
vendored
2
lib/libc/musl/src/misc/lockf.c
vendored
|
|
@ -28,5 +28,3 @@ int lockf(int fd, int op, off_t size)
|
|||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
weak_alias(lockf, lockf64);
|
||||
|
|
|
|||
12
lib/libc/musl/src/misc/mntent.c
vendored
12
lib/libc/musl/src/misc/mntent.c
vendored
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <mntent.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
|
||||
static char *internal_buf;
|
||||
static size_t internal_bufsize;
|
||||
|
|
@ -21,7 +22,8 @@ int endmntent(FILE *f)
|
|||
|
||||
struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen)
|
||||
{
|
||||
int cnt, n[8], use_internal = (linebuf == SENTINEL);
|
||||
int n[8], use_internal = (linebuf == SENTINEL);
|
||||
size_t len, i;
|
||||
|
||||
mnt->mnt_freq = 0;
|
||||
mnt->mnt_passno = 0;
|
||||
|
|
@ -39,10 +41,14 @@ struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int bufle
|
|||
errno = ERANGE;
|
||||
return 0;
|
||||
}
|
||||
cnt = sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
|
||||
|
||||
len = strlen(linebuf);
|
||||
if (len > INT_MAX) continue;
|
||||
for (i = 0; i < sizeof n / sizeof *n; i++) n[i] = len;
|
||||
sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
|
||||
n, n+1, n+2, n+3, n+4, n+5, n+6, n+7,
|
||||
&mnt->mnt_freq, &mnt->mnt_passno);
|
||||
} while (cnt < 2 || linebuf[n[0]] == '#');
|
||||
} while (linebuf[n[0]] == '#' || n[1]==len);
|
||||
|
||||
linebuf[n[1]] = 0;
|
||||
linebuf[n[3]] = 0;
|
||||
|
|
|
|||
6
lib/libc/musl/src/misc/nftw.c
vendored
6
lib/libc/musl/src/misc/nftw.c
vendored
|
|
@ -31,6 +31,8 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int,
|
|||
int err;
|
||||
struct FTW lev;
|
||||
|
||||
st.st_dev = st.st_ino = 0;
|
||||
|
||||
if ((flags & FTW_PHYS) ? lstat(path, &st) : stat(path, &st) < 0) {
|
||||
if (!(flags & FTW_PHYS) && errno==ENOENT && !lstat(path, &st))
|
||||
type = FTW_SLN;
|
||||
|
|
@ -46,7 +48,7 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int,
|
|||
type = FTW_F;
|
||||
}
|
||||
|
||||
if ((flags & FTW_MOUNT) && h && st.st_dev != h->dev)
|
||||
if ((flags & FTW_MOUNT) && h && type != FTW_NS && st.st_dev != h->dev)
|
||||
return 0;
|
||||
|
||||
new.chain = h;
|
||||
|
|
@ -138,5 +140,3 @@ int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, str
|
|||
pthread_setcancelstate(cs, 0);
|
||||
return r;
|
||||
}
|
||||
|
||||
weak_alias(nftw, nftw64);
|
||||
|
|
|
|||
8
lib/libc/musl/src/misc/setrlimit.c
vendored
8
lib/libc/musl/src/misc/setrlimit.c
vendored
|
|
@ -12,12 +12,14 @@ struct ctx {
|
|||
int err;
|
||||
};
|
||||
|
||||
#ifdef SYS_setrlimit
|
||||
static void do_setrlimit(void *p)
|
||||
{
|
||||
struct ctx *c = p;
|
||||
if (c->err>0) return;
|
||||
c->err = -__syscall(SYS_setrlimit, c->res, c->lim);
|
||||
}
|
||||
#endif
|
||||
|
||||
int setrlimit(int resource, const struct rlimit *rlim)
|
||||
{
|
||||
|
|
@ -29,6 +31,7 @@ int setrlimit(int resource, const struct rlimit *rlim)
|
|||
rlim = &tmp;
|
||||
}
|
||||
int ret = __syscall(SYS_prlimit64, 0, resource, rlim, 0);
|
||||
#ifdef SYS_setrlimit
|
||||
if (ret != -ENOSYS) return __syscall_ret(ret);
|
||||
|
||||
struct ctx c = {
|
||||
|
|
@ -42,6 +45,7 @@ int setrlimit(int resource, const struct rlimit *rlim)
|
|||
return -1;
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return __syscall_ret(ret);
|
||||
#endif
|
||||
}
|
||||
|
||||
weak_alias(setrlimit, setrlimit64);
|
||||
|
|
|
|||
2
lib/libc/musl/src/mman/mmap.c
vendored
2
lib/libc/musl/src/mman/mmap.c
vendored
|
|
@ -37,5 +37,3 @@ void *__mmap(void *start, size_t len, int prot, int flags, int fd, off_t off)
|
|||
}
|
||||
|
||||
weak_alias(__mmap, mmap);
|
||||
|
||||
weak_alias(mmap, mmap64);
|
||||
|
|
|
|||
47
lib/libc/musl/src/mq/mq_notify.c
vendored
47
lib/libc/musl/src/mq/mq_notify.c
vendored
|
|
@ -4,11 +4,14 @@
|
|||
#include <sys/socket.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <semaphore.h>
|
||||
#include "syscall.h"
|
||||
|
||||
struct args {
|
||||
pthread_barrier_t barrier;
|
||||
sem_t sem;
|
||||
int sock;
|
||||
mqd_t mqd;
|
||||
int err;
|
||||
const struct sigevent *sev;
|
||||
};
|
||||
|
||||
|
|
@ -20,8 +23,19 @@ static void *start(void *p)
|
|||
int s = args->sock;
|
||||
void (*func)(union sigval) = args->sev->sigev_notify_function;
|
||||
union sigval val = args->sev->sigev_value;
|
||||
struct sigevent sev2;
|
||||
static const char zeros[32];
|
||||
int err;
|
||||
|
||||
pthread_barrier_wait(&args->barrier);
|
||||
sev2.sigev_notify = SIGEV_THREAD;
|
||||
sev2.sigev_signo = s;
|
||||
sev2.sigev_value.sival_ptr = (void *)&zeros;
|
||||
|
||||
args->err = err = -__syscall(SYS_mq_notify, args->mqd, &sev2);
|
||||
sem_post(&args->sem);
|
||||
if (err) return 0;
|
||||
|
||||
pthread_detach(pthread_self());
|
||||
n = recv(s, buf, sizeof(buf), MSG_NOSIGNAL|MSG_WAITALL);
|
||||
close(s);
|
||||
if (n==sizeof buf && buf[sizeof buf - 1] == 1)
|
||||
|
|
@ -35,8 +49,8 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev)
|
|||
pthread_attr_t attr;
|
||||
pthread_t td;
|
||||
int s;
|
||||
struct sigevent sev2;
|
||||
static const char zeros[32];
|
||||
int cs;
|
||||
sigset_t allmask, origmask;
|
||||
|
||||
if (!sev || sev->sigev_notify != SIGEV_THREAD)
|
||||
return syscall(SYS_mq_notify, mqd, sev);
|
||||
|
|
@ -44,30 +58,35 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev)
|
|||
s = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, 0);
|
||||
if (s < 0) return -1;
|
||||
args.sock = s;
|
||||
args.mqd = mqd;
|
||||
|
||||
if (sev->sigev_notify_attributes) attr = *sev->sigev_notify_attributes;
|
||||
else pthread_attr_init(&attr);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||
pthread_barrier_init(&args.barrier, 0, 2);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
|
||||
sem_init(&args.sem, 0, 0);
|
||||
|
||||
sigfillset(&allmask);
|
||||
pthread_sigmask(SIG_BLOCK, &allmask, &origmask);
|
||||
if (pthread_create(&td, &attr, start, &args)) {
|
||||
__syscall(SYS_close, s);
|
||||
pthread_sigmask(SIG_SETMASK, &origmask, 0);
|
||||
errno = EAGAIN;
|
||||
return -1;
|
||||
}
|
||||
pthread_sigmask(SIG_SETMASK, &origmask, 0);
|
||||
|
||||
pthread_barrier_wait(&args.barrier);
|
||||
pthread_barrier_destroy(&args.barrier);
|
||||
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
|
||||
sem_wait(&args.sem);
|
||||
sem_destroy(&args.sem);
|
||||
|
||||
sev2.sigev_notify = SIGEV_THREAD;
|
||||
sev2.sigev_signo = s;
|
||||
sev2.sigev_value.sival_ptr = (void *)&zeros;
|
||||
|
||||
if (syscall(SYS_mq_notify, mqd, &sev2) < 0) {
|
||||
pthread_cancel(td);
|
||||
if (args.err) {
|
||||
__syscall(SYS_close, s);
|
||||
pthread_join(td, 0);
|
||||
pthread_setcancelstate(cs, 0);
|
||||
errno = args.err;
|
||||
return -1;
|
||||
}
|
||||
|
||||
pthread_setcancelstate(cs, 0);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
4
lib/libc/musl/src/network/accept4.c
vendored
4
lib/libc/musl/src/network/accept4.c
vendored
|
|
@ -9,6 +9,10 @@ int accept4(int fd, struct sockaddr *restrict addr, socklen_t *restrict len, int
|
|||
if (!flg) return accept(fd, addr, len);
|
||||
int ret = socketcall_cp(accept4, fd, addr, len, flg, 0, 0);
|
||||
if (ret>=0 || (errno != ENOSYS && errno != EINVAL)) return ret;
|
||||
if (flg & ~(SOCK_CLOEXEC|SOCK_NONBLOCK)) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
ret = accept(fd, addr, len);
|
||||
if (ret<0) return ret;
|
||||
if (flg & SOCK_CLOEXEC)
|
||||
|
|
|
|||
10
lib/libc/musl/src/network/dns_parse.c
vendored
10
lib/libc/musl/src/network/dns_parse.c
vendored
|
|
@ -1,7 +1,7 @@
|
|||
#include <string.h>
|
||||
#include "lookup.h"
|
||||
|
||||
int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, const void *, int, const void *), void *ctx)
|
||||
int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, const void *, int, const void *, int), void *ctx)
|
||||
{
|
||||
int qdcount, ancount;
|
||||
const unsigned char *p;
|
||||
|
|
@ -15,18 +15,18 @@ int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, c
|
|||
if (qdcount+ancount > 64) return -1;
|
||||
while (qdcount--) {
|
||||
while (p-r < rlen && *p-1U < 127) p++;
|
||||
if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6)
|
||||
if (p>r+rlen-6 || *p>193 || (*p==193 && p[1]>254))
|
||||
return -1;
|
||||
p += 5 + !!*p;
|
||||
}
|
||||
while (ancount--) {
|
||||
while (p-r < rlen && *p-1U < 127) p++;
|
||||
if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6)
|
||||
if (p>r+rlen-12 || *p>193 || (*p==193 && p[1]>254))
|
||||
return -1;
|
||||
p += 1 + !!*p;
|
||||
len = p[8]*256 + p[9];
|
||||
if (p+len > r+rlen) return -1;
|
||||
if (callback(ctx, p[1], p+10, len, r) < 0) return -1;
|
||||
if (len+10 > r+rlen-p) return -1;
|
||||
if (callback(ctx, p[1], p+10, len, r, rlen) < 0) return -1;
|
||||
p += 10 + len;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
2
lib/libc/musl/src/network/gai_strerror.c
vendored
2
lib/libc/musl/src/network/gai_strerror.c
vendored
|
|
@ -6,7 +6,7 @@ static const char msgs[] =
|
|||
"Name does not resolve\0"
|
||||
"Try again\0"
|
||||
"Non-recoverable error\0"
|
||||
"Unknown error\0"
|
||||
"Name has no usable address\0"
|
||||
"Unrecognized address family or invalid length\0"
|
||||
"Unrecognized socket type\0"
|
||||
"Unrecognized service\0"
|
||||
|
|
|
|||
7
lib/libc/musl/src/network/getaddrinfo.c
vendored
7
lib/libc/musl/src/network/getaddrinfo.c
vendored
|
|
@ -16,6 +16,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||
char canon[256], *outcanon;
|
||||
int nservs, naddrs, nais, canon_len, i, j, k;
|
||||
int family = AF_UNSPEC, flags = 0, proto = 0, socktype = 0;
|
||||
int no_family = 0;
|
||||
struct aibuf *out;
|
||||
|
||||
if (!host && !serv) return EAI_NONAME;
|
||||
|
|
@ -66,9 +67,11 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||
pthread_setcancelstate(
|
||||
PTHREAD_CANCEL_DISABLE, &cs);
|
||||
int r = connect(s, ta[i], tl[i]);
|
||||
int saved_errno = errno;
|
||||
pthread_setcancelstate(cs, 0);
|
||||
close(s);
|
||||
if (!r) continue;
|
||||
errno = saved_errno;
|
||||
}
|
||||
switch (errno) {
|
||||
case EADDRNOTAVAIL:
|
||||
|
|
@ -80,7 +83,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||
default:
|
||||
return EAI_SYSTEM;
|
||||
}
|
||||
if (family == tf[i]) return EAI_NONAME;
|
||||
if (family == tf[i]) no_family = 1;
|
||||
family = tf[1-i];
|
||||
}
|
||||
}
|
||||
|
|
@ -91,6 +94,8 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||
naddrs = __lookup_name(addrs, canon, host, family, flags);
|
||||
if (naddrs < 0) return naddrs;
|
||||
|
||||
if (no_family) return EAI_NODATA;
|
||||
|
||||
nais = nservs * naddrs;
|
||||
canon_len = strlen(canon);
|
||||
out = calloc(1, nais * sizeof(*out) + canon_len + 1);
|
||||
|
|
|
|||
2
lib/libc/musl/src/network/gethostbyaddr.c
vendored
2
lib/libc/musl/src/network/gethostbyaddr.c
vendored
|
|
@ -20,5 +20,5 @@ struct hostent *gethostbyaddr(const void *a, socklen_t l, int af)
|
|||
err = gethostbyaddr_r(a, l, af, h,
|
||||
(void *)(h+1), size-sizeof *h, &res, &h_errno);
|
||||
} while (err == ERANGE);
|
||||
return err ? 0 : h;
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
5
lib/libc/musl/src/network/gethostbyaddr_r.c
vendored
5
lib/libc/musl/src/network/gethostbyaddr_r.c
vendored
|
|
@ -54,9 +54,10 @@ int gethostbyaddr_r(const void *a, socklen_t l, int af,
|
|||
case EAI_OVERFLOW:
|
||||
return ERANGE;
|
||||
default:
|
||||
case EAI_MEMORY:
|
||||
case EAI_SYSTEM:
|
||||
case EAI_FAIL:
|
||||
*err = NO_RECOVERY;
|
||||
return EBADMSG;
|
||||
case EAI_SYSTEM:
|
||||
*err = NO_RECOVERY;
|
||||
return errno;
|
||||
case 0:
|
||||
|
|
|
|||
2
lib/libc/musl/src/network/gethostbyname2.c
vendored
2
lib/libc/musl/src/network/gethostbyname2.c
vendored
|
|
@ -21,5 +21,5 @@ struct hostent *gethostbyname2(const char *name, int af)
|
|||
err = gethostbyname2_r(name, af, h,
|
||||
(void *)(h+1), size-sizeof *h, &res, &h_errno);
|
||||
} while (err == ERANGE);
|
||||
return err ? 0 : h;
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
6
lib/libc/musl/src/network/gethostbyname2_r.c
vendored
6
lib/libc/musl/src/network/gethostbyname2_r.c
vendored
|
|
@ -22,7 +22,10 @@ int gethostbyname2_r(const char *name, int af,
|
|||
if (cnt<0) switch (cnt) {
|
||||
case EAI_NONAME:
|
||||
*err = HOST_NOT_FOUND;
|
||||
return ENOENT;
|
||||
return 0;
|
||||
case EAI_NODATA:
|
||||
*err = NO_DATA;
|
||||
return 0;
|
||||
case EAI_AGAIN:
|
||||
*err = TRY_AGAIN;
|
||||
return EAGAIN;
|
||||
|
|
@ -30,7 +33,6 @@ int gethostbyname2_r(const char *name, int af,
|
|||
case EAI_FAIL:
|
||||
*err = NO_RECOVERY;
|
||||
return EBADMSG;
|
||||
case EAI_MEMORY:
|
||||
case EAI_SYSTEM:
|
||||
*err = NO_RECOVERY;
|
||||
return errno;
|
||||
|
|
|
|||
14
lib/libc/musl/src/network/getifaddrs.c
vendored
14
lib/libc/musl/src/network/getifaddrs.c
vendored
|
|
@ -39,8 +39,8 @@ struct ifaddrs_storage {
|
|||
};
|
||||
|
||||
struct ifaddrs_ctx {
|
||||
struct ifaddrs_storage *first;
|
||||
struct ifaddrs_storage *last;
|
||||
struct ifaddrs *first;
|
||||
struct ifaddrs *last;
|
||||
struct ifaddrs_storage *hash[IFADDRS_HASH_SIZE];
|
||||
};
|
||||
|
||||
|
|
@ -195,9 +195,9 @@ static int netlink_msg_to_ifaddr(void *pctx, struct nlmsghdr *h)
|
|||
}
|
||||
|
||||
if (ifs->ifa.ifa_name) {
|
||||
if (!ctx->first) ctx->first = ifs;
|
||||
if (ctx->last) ctx->last->ifa.ifa_next = &ifs->ifa;
|
||||
ctx->last = ifs;
|
||||
if (!ctx->first) ctx->first = &ifs->ifa;
|
||||
if (ctx->last) ctx->last->ifa_next = &ifs->ifa;
|
||||
ctx->last = &ifs->ifa;
|
||||
} else {
|
||||
free(ifs);
|
||||
}
|
||||
|
|
@ -210,7 +210,7 @@ int getifaddrs(struct ifaddrs **ifap)
|
|||
int r;
|
||||
memset(ctx, 0, sizeof *ctx);
|
||||
r = __rtnetlink_enumerate(AF_UNSPEC, AF_UNSPEC, netlink_msg_to_ifaddr, ctx);
|
||||
if (r == 0) *ifap = &ctx->first->ifa;
|
||||
else freeifaddrs(&ctx->first->ifa);
|
||||
if (r == 0) *ifap = ctx->first;
|
||||
else freeifaddrs(ctx->first);
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
5
lib/libc/musl/src/network/getnameinfo.c
vendored
5
lib/libc/musl/src/network/getnameinfo.c
vendored
|
|
@ -58,6 +58,7 @@ static void reverse_hosts(char *buf, const unsigned char *a, unsigned scopeid, i
|
|||
if ((p=strchr(line, '#'))) *p++='\n', *p=0;
|
||||
|
||||
for (p=line; *p && !isspace(*p); p++);
|
||||
if (!*p) continue;
|
||||
*p++ = 0;
|
||||
if (__lookup_ipliteral(&iplit, line, AF_UNSPEC)<=0)
|
||||
continue;
|
||||
|
|
@ -108,10 +109,10 @@ static void reverse_services(char *buf, int port, int dgram)
|
|||
__fclose_ca(f);
|
||||
}
|
||||
|
||||
static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet)
|
||||
static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet, int plen)
|
||||
{
|
||||
if (rr != RR_PTR) return 0;
|
||||
if (__dn_expand(packet, (const unsigned char *)packet + 512,
|
||||
if (__dn_expand(packet, (const unsigned char *)packet + plen,
|
||||
data, c, 256) <= 0)
|
||||
*(char *)c = 0;
|
||||
return 0;
|
||||
|
|
|
|||
4
lib/libc/musl/src/network/getservbyport_r.c
vendored
4
lib/libc/musl/src/network/getservbyport_r.c
vendored
|
|
@ -26,7 +26,7 @@ int getservbyport_r(int port, const char *prots,
|
|||
/* Align buffer */
|
||||
i = (uintptr_t)buf & sizeof(char *)-1;
|
||||
if (!i) i = sizeof(char *);
|
||||
if (buflen < 3*sizeof(char *)-i)
|
||||
if (buflen <= 3*sizeof(char *)-i)
|
||||
return ERANGE;
|
||||
buf += sizeof(char *)-i;
|
||||
buflen -= sizeof(char *)-i;
|
||||
|
|
@ -46,6 +46,8 @@ int getservbyport_r(int port, const char *prots,
|
|||
case EAI_MEMORY:
|
||||
case EAI_SYSTEM:
|
||||
return ENOMEM;
|
||||
case EAI_OVERFLOW:
|
||||
return ERANGE;
|
||||
default:
|
||||
return ENOENT;
|
||||
case 0:
|
||||
|
|
|
|||
1
lib/libc/musl/src/network/inet_pton.c
vendored
1
lib/libc/musl/src/network/inet_pton.c
vendored
|
|
@ -54,6 +54,7 @@ int inet_pton(int af, const char *restrict s, void *restrict a0)
|
|||
if (s[j]!='.' || (i<6 && brk<0)) return 0;
|
||||
need_v4=1;
|
||||
i++;
|
||||
ip[i&7]=0;
|
||||
break;
|
||||
}
|
||||
s += j+1;
|
||||
|
|
|
|||
2
lib/libc/musl/src/network/lookup.h
vendored
2
lib/libc/musl/src/network/lookup.h
vendored
|
|
@ -50,6 +50,6 @@ hidden int __lookup_ipliteral(struct address buf[static 1], const char *name, in
|
|||
hidden int __get_resolv_conf(struct resolvconf *, char *, size_t);
|
||||
hidden int __res_msend_rc(int, const unsigned char *const *, const int *, unsigned char *const *, int *, int, const struct resolvconf *);
|
||||
|
||||
hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *), void *);
|
||||
hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *, int), void *);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
4
lib/libc/musl/src/network/lookup_ipliteral.c
vendored
4
lib/libc/musl/src/network/lookup_ipliteral.c
vendored
|
|
@ -15,7 +15,7 @@ int __lookup_ipliteral(struct address buf[static 1], const char *name, int famil
|
|||
struct in6_addr a6;
|
||||
if (__inet_aton(name, &a4) > 0) {
|
||||
if (family == AF_INET6) /* wrong family */
|
||||
return EAI_NONAME;
|
||||
return EAI_NODATA;
|
||||
memcpy(&buf[0].addr, &a4, sizeof a4);
|
||||
buf[0].family = AF_INET;
|
||||
buf[0].scopeid = 0;
|
||||
|
|
@ -34,7 +34,7 @@ int __lookup_ipliteral(struct address buf[static 1], const char *name, int famil
|
|||
if (inet_pton(AF_INET6, name, &a6) <= 0)
|
||||
return 0;
|
||||
if (family == AF_INET) /* wrong family */
|
||||
return EAI_NONAME;
|
||||
return EAI_NODATA;
|
||||
|
||||
memcpy(&buf[0].addr, &a6, sizeof a6);
|
||||
buf[0].family = AF_INET6;
|
||||
|
|
|
|||
50
lib/libc/musl/src/network/lookup_name.c
vendored
50
lib/libc/musl/src/network/lookup_name.c
vendored
|
|
@ -79,7 +79,7 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati
|
|||
case 0:
|
||||
continue;
|
||||
default:
|
||||
badfam = EAI_NONAME;
|
||||
badfam = EAI_NODATA;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -102,45 +102,50 @@ struct dpc_ctx {
|
|||
struct address *addrs;
|
||||
char *canon;
|
||||
int cnt;
|
||||
int rrtype;
|
||||
};
|
||||
|
||||
#define RR_A 1
|
||||
#define RR_CNAME 5
|
||||
#define RR_AAAA 28
|
||||
|
||||
static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet)
|
||||
#define ABUF_SIZE 768
|
||||
|
||||
static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet, int plen)
|
||||
{
|
||||
char tmp[256];
|
||||
int family;
|
||||
struct dpc_ctx *ctx = c;
|
||||
if (ctx->cnt >= MAXADDRS) return -1;
|
||||
if (rr == RR_CNAME) {
|
||||
if (__dn_expand(packet, (const unsigned char *)packet + plen,
|
||||
data, tmp, sizeof tmp) > 0 && is_valid_hostname(tmp))
|
||||
strcpy(ctx->canon, tmp);
|
||||
return 0;
|
||||
}
|
||||
if (ctx->cnt >= MAXADDRS) return 0;
|
||||
if (rr != ctx->rrtype) return 0;
|
||||
switch (rr) {
|
||||
case RR_A:
|
||||
if (len != 4) return -1;
|
||||
ctx->addrs[ctx->cnt].family = AF_INET;
|
||||
ctx->addrs[ctx->cnt].scopeid = 0;
|
||||
memcpy(ctx->addrs[ctx->cnt++].addr, data, 4);
|
||||
family = AF_INET;
|
||||
break;
|
||||
case RR_AAAA:
|
||||
if (len != 16) return -1;
|
||||
ctx->addrs[ctx->cnt].family = AF_INET6;
|
||||
ctx->addrs[ctx->cnt].scopeid = 0;
|
||||
memcpy(ctx->addrs[ctx->cnt++].addr, data, 16);
|
||||
break;
|
||||
case RR_CNAME:
|
||||
if (__dn_expand(packet, (const unsigned char *)packet + 512,
|
||||
data, tmp, sizeof tmp) > 0 && is_valid_hostname(tmp))
|
||||
strcpy(ctx->canon, tmp);
|
||||
family = AF_INET6;
|
||||
break;
|
||||
}
|
||||
ctx->addrs[ctx->cnt].family = family;
|
||||
ctx->addrs[ctx->cnt].scopeid = 0;
|
||||
memcpy(ctx->addrs[ctx->cnt++].addr, data, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int name_from_dns(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, const struct resolvconf *conf)
|
||||
{
|
||||
unsigned char qbuf[2][280], abuf[2][512];
|
||||
unsigned char qbuf[2][280], abuf[2][ABUF_SIZE];
|
||||
const unsigned char *qp[2] = { qbuf[0], qbuf[1] };
|
||||
unsigned char *ap[2] = { abuf[0], abuf[1] };
|
||||
int qlens[2], alens[2];
|
||||
int qlens[2], alens[2], qtypes[2];
|
||||
int i, nq = 0;
|
||||
struct dpc_ctx ctx = { .addrs = buf, .canon = canon };
|
||||
static const struct { int af; int rr; } afrr[2] = {
|
||||
|
|
@ -153,8 +158,12 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static
|
|||
qlens[nq] = __res_mkquery(0, name, 1, afrr[i].rr,
|
||||
0, 0, 0, qbuf[nq], sizeof *qbuf);
|
||||
if (qlens[nq] == -1)
|
||||
return EAI_NONAME;
|
||||
return 0;
|
||||
qtypes[nq] = afrr[i].rr;
|
||||
qbuf[nq][3] = 0; /* don't need AD flag */
|
||||
/* Ensure query IDs are distinct. */
|
||||
if (nq && qbuf[nq][0] == qbuf[0][0])
|
||||
qbuf[nq][0]++;
|
||||
nq++;
|
||||
}
|
||||
}
|
||||
|
|
@ -168,11 +177,14 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static
|
|||
if ((abuf[i][3] & 15) != 0) return EAI_FAIL;
|
||||
}
|
||||
|
||||
for (i=0; i<nq; i++)
|
||||
for (i=nq-1; i>=0; i--) {
|
||||
ctx.rrtype = qtypes[i];
|
||||
if (alens[i] > sizeof(abuf[i])) alens[i] = sizeof abuf[i];
|
||||
__dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx);
|
||||
}
|
||||
|
||||
if (ctx.cnt) return ctx.cnt;
|
||||
return EAI_NONAME;
|
||||
return EAI_NODATA;
|
||||
}
|
||||
|
||||
static int name_from_dns_search(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family)
|
||||
|
|
|
|||
2
lib/libc/musl/src/network/netlink.h
vendored
2
lib/libc/musl/src/network/netlink.h
vendored
|
|
@ -86,7 +86,7 @@ struct ifaddrmsg {
|
|||
#define RTA_DATALEN(rta) ((rta)->rta_len-sizeof(struct rtattr))
|
||||
#define RTA_DATAEND(rta) ((char*)(rta)+(rta)->rta_len)
|
||||
#define RTA_NEXT(rta) (struct rtattr*)((char*)(rta)+NETLINK_ALIGN((rta)->rta_len))
|
||||
#define RTA_OK(nlh,end) ((char*)(end)-(char*)(rta) >= sizeof(struct rtattr))
|
||||
#define RTA_OK(rta,end) ((char*)(end)-(char*)(rta) >= sizeof(struct rtattr))
|
||||
|
||||
#define NLMSG_RTA(nlh,len) ((void*)((char*)(nlh)+sizeof(struct nlmsghdr)+NETLINK_ALIGN(len)))
|
||||
#define NLMSG_RTAOK(rta,nlh) RTA_OK(rta,NLMSG_DATAEND(nlh))
|
||||
|
|
|
|||
1
lib/libc/musl/src/network/res_mkquery.c
vendored
1
lib/libc/musl/src/network/res_mkquery.c
vendored
|
|
@ -13,6 +13,7 @@ int __res_mkquery(int op, const char *dname, int class, int type,
|
|||
int n;
|
||||
|
||||
if (l && dname[l-1]=='.') l--;
|
||||
if (l && dname[l-1]=='.') return -1;
|
||||
n = 17+l+!!l;
|
||||
if (l>253 || buflen<n || op>15u || class>255u || type>255u)
|
||||
return -1;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue