Commit Graph

690 Commits

Author SHA1 Message Date
Rich Felker
5ff2a118c6 fix definition of CMPLX macros in complex.h to work in constant expressions
based on patches by Jens Gustedt. these macros need to be usable in
static initializers, and the old definitions were not.

there is no portable way to provide correct definitions for these
macros unless the compiler supports pure imaginary types. a portable
definition is provided for this case even though there are presently
no compilers that can use it. gcc and compatible compilers provide a
builtin function that can be used, but clang fails to support this and
instead requires a construct which is a constraint violation and which
is only a constant expression as a clang-specific extension.

since these macros are a namespace violation in pre-C11 profiles, and
since no known pre-C11 compilers provide any way to define them
correctly anyway, the definitions have been made conditional on C11.
2014-12-17 16:43:09 -05:00
Rich Felker
aac59c1164 add basic dns record parsing functions
based on patch by Timo Teräs, with some corrections to bounds checking
code and other minor changes.

while they are borderline scope creep, the functions added are fairly
small and are roughly the minimum code needed to use the results of
the res_query API without re-implementing error-prone DNS packet
parsing, and they are used in practice by some kerberos related
software and possibly other things. at this time there is no intent to
implement further nameser.h API functions.
2014-12-17 14:40:35 -05:00
Bobby Bingham
f164875a84 don't shadow functions with macros in C++
C++ programmers typically expect something like "::function(x,y)" to work
and may be surprised to find that "(::function)(x,y)" is actually required
due to the headers declaring a macro version of some standard functions.

We already omit function-like macros for C++ in most cases where there is
a real function available. This commit extends this to the remaining
function-like macros which have a real function version.
2014-12-09 22:34:56 -05:00
Rich Felker
a60457c84a suppress macro definitions of ctype functions under C++
based on patch by Sergey Dmitrouk.
2014-10-14 12:30:50 -04:00
Rich Felker
ab9672ae73 implement uchar.h (C11 UTF-16/32 conversion) interfaces 2014-10-13 20:59:42 -04:00
Szabolcs Nagy
a3763d64e0 add new linux file sealing api to fcntl.h
new in linux v3.17 commit 40e041a2c858b3caefc757e26cb85bfceae5062b
sealing allows some operations to be blocked on a file which makes
file access safer when fds are shared between processes (only
supported for shared mem fds currently)

flags:
F_SEAL_SEAL prevents further sealing
F_SEAL_SHRINK prevents file from shrinking
F_SEAL_GROW prevents file from growing
F_SEAL_WRITE prevents writes

fcntl commands:
F_GET_SEALS get the current seal flags
F_ADD_SEALS add new seal flags
2014-10-08 11:39:28 -04:00
Szabolcs Nagy
a0c90b9773 add new IPV6_AUTOFLOWLABEL socket option in netinet/in.h
added in linux v3.17 commit 753a2ad54ef45e3417a9d49537c2b42b04a2e1be
enables automatic flow label generation on transmit
2014-10-08 11:38:25 -04:00
Rich Felker
5edbc6fe13 add _DEFAULT_SOURCE feature profile as an alias for _BSD_SOURCE
as a result of commit ab8f6a6e42ff893041f7545a23e6d6a0edde07fb, this
definition is now equivalent to the actual "default profile" which
appears immediately below in features.h, and which defines both
_BSD_SOURCE and _XOPEN_SOURCE.

the intent of providing a _DEFAULT_SOURCE, which glibc also now
provides, is to give applications a way to "get back" the default
feature profile when it was lost either by compiler flags that inhibit
it (such as -std=c99) or by library-provided predefined macros (such
as -D_POSIX_C_SOURCE=200809L) which may inhibit exposure of features
that were otherwise visible by default and which the application may
need. without _DEFAULT_SOURCE, the application had encode knowledge of
a particular libc's defaults, and such knowledge was fragile and
subject to bitrot.

eventually the names _GNU_SOURCE and _BSD_SOURCE should be phased out
in favor of the more-descriptive and more-accurate _ALL_SOURCE and
_DEFAULT_SOURCE, leaving the old names as aliases but using the new
ones internally. however this is a more invasive change that would
require extensive regression testing, so it is deferred.
2014-09-10 12:47:55 -04:00
Rich Felker
f929493c49 fix _ALL_SOURCE logic to avoid possible redefinition of _GNU_SOURCE
this could be an error if _GNU_SOURCE was already defined differently
by the application.
2014-09-10 12:40:38 -04:00
Rich Felker
ab8f6a6e42 fix places where _BSD_SOURCE failed to yield a superset of _XOPEN_SOURCE
the vast majority of these failures seem to have been oversights at
the time _BSD_SOURCE was added, or perhaps shortly afterward. the one
which may have had some reason behind it is omission of setpgrp from
the _BSD_SOURCE feature profile, since the standard setpgrp interface
conflicts with a legacy (pre-POSIX) BSD interface by the same name.
however, such omission is not aligned with our general policy in this
area (for example, handling of similar _GNU_SOURCE cases) and should
not be preserved.
2014-09-10 12:27:33 -04:00
Szabolcs Nagy
976bb28fa0 add new F_OFD_* macros to fcntl.h (open file description locks)
open file description locks are inherited across fork and only auto
dropped after the last fd of the file description is closed, they can be
used to synchronize between threads that open separate file descriptions
for the same file.

new in linux 3.15 commit 0d3f7a2dd2f5cf9642982515e020c1aee2cf7af6
2014-09-08 15:35:26 +02:00
Rich Felker
b7cf71a190 add threads.h and needed per-arch types for mtx_t and cnd_t
based on patch by Jens Gustedt.

mtx_t and cnd_t are defined in such a way that they are formally
"compatible types" with pthread_mutex_t and pthread_cond_t,
respectively, when accessed from a different translation unit. this
makes it possible to implement the C11 functions using the pthread
functions (which will dereference them with the pthread types) without
having to use the same types, which would necessitate either namespace
violations (exposing pthread type names in threads.h) or incompatible
changes to the C++ name mangling ABI for the pthread types.

for the rest of the types, things are much simpler; using identical
types is possible without any namespace considerations.
2014-09-06 20:44:30 -04:00
Rich Felker
6eb19505bc add C11 timespec_get function, with associated time.h changes for C11
based on patch by Jens Gustedt for inclusion with C11 threads
implementation, but committed separately since it's independent of
threads.
2014-09-06 12:58:09 -04:00
Szabolcs Nagy
7ff804269b fix macros for LFS *64_t types in sys/stat.h, sys/types.h, glob.h
there is no blksize64_t (blksize_t is always long) but there are
fsblkcnt64_t and fsfilcnt64_t types in sys/stat.h and sys/types.h.
and glob.h missed glob64_t.
2014-09-05 16:03:07 -04:00
Szabolcs Nagy
70729de075 add static_assert and hide noreturn, alignas, alignof from C++
add static_assert and protect the other new C11 keyword macros
with #ifndef __cplusplus so they don't conflict with C++ keywords.
2014-08-27 02:55:54 -04:00
Szabolcs Nagy
18dde00713 add C11 floating-point characteristic macros to float.h
C11 introduced *_DECIMAL_DIG and *_HAS_SUBNORM macros.
2014-08-27 02:54:01 -04:00
Rich Felker
8d998a7b3b add malloc_usable_size function and non-stub malloc.h
this function is needed for some important practical applications of
ABI compatibility, and may be useful for supporting some non-portable
software at the source level too.

I was hesitant to add a function which imposes any constraints on
malloc internals; however, it turns out that any malloc implementation
which has realloc must already have an efficient way to determine the
size of existing allocations, so no additional constraint is imposed.

for now, some internal malloc definitions are duplicated in the new
source file. if/when malloc is refactored to put them in a shared
internal header file, these could be removed.

since malloc_usable_size is conventionally declared in malloc.h, the
empty stub version of this file was no longer suitable. it's updated
to provide the standard allocator functions, nonstandard ones (even if
stdlib.h would not expose them based on the feature test macros in
effect), and any malloc-extension functions provided (currently, only
malloc_usable_size).
2014-08-25 22:47:27 -04:00
Rich Felker
321f4fa906 add max_align_t definition for C11 and C++11
unfortunately this needs to be able to vary by arch, because of a huge
mess GCC made: the GCC definition, which became the ABI, depends on
quirks in GCC's definition of __alignof__, which does not match the
formal alignment of the type.

GCC's __alignof__ unexpectedly exposes the an implementation detail,
its "preferred alignment" for the type, rather than the formal/ABI
alignment of the type, which it only actually uses in structures. on
most archs the two values are the same, but on some (at least i386)
the preferred alignment is greater than the ABI alignment.

I considered using _Alignas(8) unconditionally, but on at least one
arch (or1k), the alignment of max_align_t with GCC's definition is
only 4 (even the "preferred alignment" for these types is only 4).
2014-08-20 17:20:14 -04:00
Szabolcs Nagy
d146d4dc11 fix CPU_EQUAL macro in sched.h 2014-08-13 16:55:56 +02:00
Szabolcs Nagy
b04971d91a add inline isspace in ctype.h as an optimization
isspace can be a bottleneck in a simple parser, inlining it
gives slightly smaller and faster code

src/locale/pleval.o already had this optimization, the size
change for other libc functions for i386 is

src/internal/intscan.o     2134    2118   -16
src/locale/dcngettext.o    1562    1552   -10
src/network/res_msend.o    1961    1940   -21
src/network/lookup_name.o  2627    2608   -19
src/network/getnameinfo.o  1814    1811    -3
src/network/lookup_serv.o   643     624   -19
src/stdio/vfscanf.o        2675    2663   -12
src/stdlib/atoll.o          117     107   -10
src/stdlib/atoi.o            95      91    -4
src/stdlib/atol.o            95      91    -4
src/time/strptime.o        1515    1503   -12
(TOTALS)                 432451  432321  -130
2014-08-13 16:47:51 +02:00
Clément Vasseur
b1ae7b78bd make clearenv available with _BSD_SOURCE
glibc declares clearenv under _BSD_SOURCE, some applications might
depend on it being available this way.
2014-08-08 00:45:42 -04:00
Rich Felker
ecc082c61b implement ffsl and ffsll functions
per the resolution of Austin Group issue #617, these are accepted for
XSI option in POSIX future and thus I'm treating them as standard
functions.
2014-07-31 02:38:23 -04:00
Rich Felker
38db09374a limit visibility of ffs function declaration to _XOPEN_SOURCE
per the standard, ffs is XSI shaded, whereas the other functions in
this header are in the base.
2014-07-31 02:33:17 -04:00
Szabolcs Nagy
871a09c86f add new PR_SET_THP_DISABLE and PR_GET_THP_DISABLE prctl flags
they can be used to set or query if transparent huge pages are disabled.
introduced in linux 3.15 commit a0715cc22601e8830ace98366c0c2bd8da52af52
2014-07-20 18:49:16 +02:00
Szabolcs Nagy
6119fa3269 add pacing rate information to the tcp_info struct in tcp.h
used by monitoring applications such as ss from iproute2
introduced in linux 3.15 commit 977cb0ecf82eb6d15562573c31edebf90db35163
2014-07-20 18:45:43 +02:00
Szabolcs Nagy
4a142db74f add new ethernet packet types ETH_P_80221, ETH_P_LOOPBACK
ETH_P_80221 is ethertype for IEEE Std 802.21 - Media Independent Handover Protocol
introduced in linux 3.15 commit b62faf3cdc875a1ac5a10696cf6ea0b12bab1596

ETH_P_LOOPBACK is the correct packet type for loopback in IEEE 802.3*
introduced in linux 3.15 commit 61ccbb684421d374fdcd7cf5d6b024b06f03ce4e

some defines were shuffled to be in ascending order and match the kernel header
2014-07-20 18:42:21 +02:00
Brent Cook
ddddec106f add issetugid function to check for elevated privilege
this function provides a way for third-party library code to use the
same logic that's used internally in libc for suppressing untrusted
input/state (e.g. the environment) when the application is running
with privleges elevated by the setuid or setgid bit or some other
mechanism. its semantics are intended to match the openbsd function by
the same name.

there was some question as to whether this function is necessary:
getauxval(AT_SECURE) was proposed as an alternative. however, this has
several drawbacks. the most obvious is that it asks programmers to be
aware of an implementation detail of ELF-based systems (the aux
vector) rather than simply the semantic predicate to be checked. and
trying to write a safe, reliable version of issetugid in terms of
getauxval is difficult. for example, early versions of the glibc
getauxval did not report ENOENT, which could lead to false negatives
if AT_SECURE was not present in the aux vector (this could probably
only happen when running on non-linux kernels under linux emulation,
since glibc does not support linux versions old enough to lack
AT_SECURE). as for musl, getauxval has always properly reported
errors, but prior to commit 7bece9c2095ee81f14b1088f6b0ba2f37fecb283,
the musl implementation did not emulate AT_SECURE if missing, which
would result in a false positive. since musl actually does partially
support kernels that lack AT_SECURE, this was problematic.

the intent is that library authors will use issetugid if its
availability is detected at build time, and only fall back to the
unreliable alternatives on systems that lack it.

patch by Brent Cook. commit message/rationale by Rich Felker.
2014-07-19 21:39:18 -04:00
Stefan Kristiansson
200d15479c add or1k (OpenRISC 1000) architecture port
With the exception of a fenv implementation, the port is fully featured.
The port has been tested in or1ksim, the golden reference functional
simulator for OpenRISC 1000.
It passes all libc-test tests (except the math tests that
requires a fenv implementation).

The port assumes an or1k implementation that has support for
atomic instructions (l.lwa/l.swa).

Although it passes all the libc-test tests, the port is still
in an experimental state, and has yet experienced very little
'real-world' use.
2014-07-18 14:10:23 -04:00
Rich Felker
5474a34669 implement fmtmsg function
contributed by Isaac Dunham. this seems to be the last interface that
was missing for complete POSIX 2008 base + XSI coverage.
2014-06-21 19:24:15 -04:00
Rich Felker
70d9c303b3 remove hack in syslog.h that resulted in aliasing violations
this issue affected the prioritynames and facilitynames arrays which
are only provided when requested (usually by syslogd implementations)
and which are presently defined as compound literals. the aliasing
violation seems to have been introduced as a workaround for bad
behavior by gcc's -Wwrite-strings option, but it caused compilers to
completely optimize out the contents of prioritynames and
facilitynames since, under many usage cases, the aliasing rules prove
that the contents are never accessed.
2014-06-21 07:44:46 -04:00
Rich Felker
acb7e049b8 implement sendmmsg and recvmmsg
these are not pure syscall wrappers because they have to work around
kernel API bugs on 64-bit archs. the workarounds could probably be
made somewhat more efficient, but at the cost of more complexity. this
may be revisited later.
2014-06-19 23:01:15 -04:00
Rich Felker
bdad2fefb2 add support for ipv6 scope_id to getaddrinfo and getnameinfo
for all address types, a scope_id specified as a decimal value is
accepted. for addresses with link-local scope, a string containing the
interface name is also accepted.

some changes are made to error handling to avoid unwanted fallbacks in
the case where the scope_id is invalid: if an earlier name lookup
backend fails with an error rather than simply "0 results", this
failure now suppresses any later attempts with other backends.

in getnameinfo, a light "itoa" type function is added for generating
decimal scope_id results, and decimal port strings for services are
also generated using this function now so as not to pull in the
dependency on snprintf.

in netdb.h, a definition for the NI_NUMERICSCOPE flag is added. this
is required by POSIX (it was previously missing) and needed to allow
callers to suppress interface-name lookups.
2014-06-04 02:24:38 -04:00
Szabolcs Nagy
5f4c496693 fix POSIX namespace pollution in sys/types.h
int8_t, u_int8_t, etc types are moved under _BSD_SOURCE
2014-05-30 13:06:51 -04:00
Szabolcs Nagy
c350468658 update netinet/in.h to match the current kernel uapi
from linux/in.h and linux/in6.h uapi headers the following
missing socket options were added:

IP_NODEFRAG - used with customized ipv4 headers
IPV6_RECVPATHMTU - for ipv6 path mtu
IPV6_PATHMTU - for ipv6 path mtu
IPV6_DONTFRAG - for ipv6 path mtu
IPV6_ADDR_PREFERENCES - RFC5014 Source Address Selection
IPV6_MINHOPCOUNT - RFC5082 Generalized TTL Security Mechanism
IPV6_ORIGDSTADDR - used by tproxy
IPV6_RECVORIGDSTADDR - used by tproxy
IPV6_TRANSPARENT - used by tproxy
IPV6_UNICAST_IF - ipv6 version of IP_UNICAST_IF

and socket option values:

IP_PMTUDISC_OMIT - value for IP_MTU_DISCOVER option, new in linux 3.14
IPV6_PMTUDISC_OMIT - same for IPV6_MTU_DISCOVER
IPV6_PMTUDISC_INTERFACE - ipv6 version of IP_PMTUDISC_INTERFACE
IPV6_PREFER_* - flags for IPV6_ADDR_PREFERENCES

not added: ipv6 flow info and flow label related definitions.
(it's unclear if libc should define these and namespace polluting
type name is involved so they are not provided for now)
2014-05-30 13:06:51 -04:00
Szabolcs Nagy
c8ea212668 add SO_BPF_EXTENSIONS socket option
this was introduced to query BPF extension support with getsockopt
in linux 3.14, commit ea02f9411d9faa3553ed09ce0ec9f00ceae9885e
2014-05-30 13:06:51 -04:00
Szabolcs Nagy
fd9571e20a add sched_{get,set}attr syscall numbers and SCHED_DEADLINE macro
linux 3.14 introduced sched_getattr and sched_setattr syscalls in
commit d50dde5a10f305253cbc3855307f608f8a3c5f73

and the related SCHED_DEADLINE scheduling policy in
commit aab03e05e8f7e26f51dee792beddcb5cca9215a5

but struct sched_attr "extended scheduling parameters data structure"
is not yet exported to userspace (necessary for using the syscalls)
so related uapi definitions are not added yet.
2014-05-30 13:06:51 -04:00
Rich Felker
44d28e5512 overhaul siginfo_t definition in signal.h
the main motivation for this change is that, with the previous
definition, it was arguably illegal, in standard C, to initialize both
si_value and si_pid/si_uid with designated initializers, due to the
rule that only one member of a union can have an initializer. whether
or not this affected real-world application code, it affected some
internal code, and clang was producing warnings (and possibly
generating incorrect code).

the new definition uses a more complex hierarchy of structs and unions
to avoid the need to initialize more than one member of a single union
in usage cases that make sense. further work would be needed to
eliminate even the ones with no practical applications.

at the same time, some fixes are made to the exposed names for
nonstandard fields, to match what software using them expects.
2014-05-24 20:39:46 -04:00
Rich Felker
93be56ba88 remove unsupported nonstandard sysconf macros and their table entries
some of these may have been from ancient (pre-SUSv2) POSIX versions;
more likely, they were from POSIX drafts or glibc interpretations of
what ancient versions of POSIX should have added (instead they made
they described functionality mandatory and/or dropped it completely).
others are purely glibc-isms, many of them ill-thought-out, like
providing ways to lookup the min/max values of types at runtime
(despite the impossibility of them changing at runtime and the
impossibility of representing ULONG_MAX in a return value of type
long).

since our sysconf implementation does not support or return meaningful
values for any of these, it's harmful to have the macros around;
applications' build scripts may detect and attempt to use them, only
to get -1/EINVAL as a result.

if removing them does break some applications, and it's determined
that the usage was reasonable, some of these could be added back on an
as-needed basis, but they should return actual meaningful values, not
junk like they were returning before.
2014-05-19 12:18:16 -04:00
M Farkas-Dyck
164c5c7a32 expose public execvpe interface 2014-04-20 00:26:55 -04:00
Szabolcs Nagy
fcea534e57 fix RLIMIT_ constants for mips
The mips arch is special in that it uses different RLIMIT_
numbers than other archs, so allow bits/resource.h to override
the default RLIMIT_ numbers (empty on all archs except mips).
Reported by orc.
2014-04-15 19:17:52 -04:00
Rich Felker
21ada94c4b add getauxval function
in a sense this implementation is incomplete since it doesn't provide
the HWCAP_* macros for use with AT_HWCAP, which is perhaps the most
important intended usage case for getauxval. they will be added at a
later time.
2014-04-07 02:46:15 -04:00
sin
fe1ba7dbf1 implement hcreate_r, hdestroy_r and hsearch_r
the size and alignment of struct hsearch_data are matched to the glibc
definition for binary compatibility. the members of the structure do
not match, which should not be a problem as long as applications
correctly treat the structure as opaque.

unlike the glibc implementation, this version of hcreate_r does not
require the caller to zero-fill the structure before use.
2014-04-02 18:37:45 -04:00
Rich Felker
9505bfbc40 fix signal.h breakage from moving stack_t to arch-specific bits
in the previous changes, I missed the fact that both the prototype of
the sigaltstack function and the definition of ucontext_t depend on
stack_t.
2014-03-18 23:27:45 -04:00
Rich Felker
bd5f221eaa move signal.h definition of stack_t to arch-specific bits
it's different at least on mips. mips version will be fixed in a
separate commit to show the change.
2014-03-18 23:12:40 -04:00
Rich Felker
f6e2f7e13f move struct semid_ds to from shared sys/sem.h to bits
the definition was found to be incorrect at least for powerpc, and
fixing this cleanly requires making the definition arch-specific. this
will allow cleaning up the definition for other archs to make it more
specific, and reversing some of the ugliness (time_t hacks) introduced
with the x32 port.

this first commit simply copies the existing definition to each arch
without any changes. this is intentional, to make it easier to review
changes made on a per-arch basis.
2014-03-11 15:27:13 -04:00
Szabolcs Nagy
6739b13a17 math.h: make __FLOAT_BITS and __DOUBLE_BITS C89
Remove non-constant aggregate initializer. (Still using long long, but
that is supported by ancient compilers without __extension__ anyway).
2014-03-09 19:29:41 +01:00
Rich Felker
73f5b09605 in sys/procfs.h, avoid using __WORDSIZE macro
this was problematic because several archs don't define __WORDSIZE. we
could add it, but I would rather phase this macro out in the long
term. in our version of the headers, UINTPTR_MAX is available here, so
just use it instead.
2014-03-08 00:50:19 -05:00
Szabolcs Nagy
d82db8550a in.h: new IP_MTU_DISCOVER mode IP_PMTUDISC_INTERFACE
introduced in linux v3.13, 482fc6094afad572a4ea1fd722e7b11ca72022a0
to mitigate dns cache poisoning via fragmentation
2014-02-25 00:28:31 +01:00
Szabolcs Nagy
fb5a2ef8df if_ether.h: new ethernet protocol type
for High-availability Seamless Redundancy (HSR) specified in IEC 62439-3
new in linux v3.13, f421436a591d34fa5279b54a96ac07d70250cc8d
2014-02-25 00:24:05 +01:00
Szabolcs Nagy
099ce3631c sys/socket.h: add the SO_MAX_PACING_RATE SOL_SOCKET option
introduced in linux v3.13, 62748f32d501f5d3712a7c372bbb92abc7c62bc7
2014-02-25 00:22:04 +01:00
Szabolcs Nagy
a8a4e5c598 elf.h: add aarch64 relocations 2014-02-25 00:17:29 +01:00
Szabolcs Nagy
d99c999322 elf.h: new elf header flag to mark 2008-NaN vs legacy-NaN on mips
see glibc commit 9c21573c02446b3d5cf6a34b67c8545e5be6a600
2014-02-25 00:12:39 +01:00
rofl0r
0f169cbb79 sys/shm.h: move arch specific structs to bits/ 2014-02-23 11:07:18 +01:00
rofl0r
1a2e55b95a sys/sem.h: cheat and make all longs use time_t instead
most of the members should be time_t anyway, and time_t has the
correct semantics for "syscall_long", so it works on all archs, even x32.
2014-02-22 12:25:17 +01:00
Rich Felker
fdb3efa5dd add flock64 alias for (struct) flock in fcntl.h
this was a missing part of the LFS64 API; it's "needed" for use with
fcntl and the corresponding lock commands.
2014-02-18 11:04:15 -05:00
Szabolcs Nagy
e74f3b0234 add parens when bit and arith ops are mixed in macros in public headers
another commit to silence gcc warnings (-Wparentheses) for standard headers.
changed macros: LOG_UPTO, IN6_ARE_ADDR_EQUAL
2014-02-11 18:02:06 +01:00
Szabolcs Nagy
aa6ce3d4e3 fix signed and unsigned comparision in macros in public headers
gcc -Wsign-compare warns about expanded macros that were defined in
standard headers (before gcc 4.8) which can make builds fail that
use -Werror. changed macros: WIFSIGNALED, __CPU_op_S
2014-02-11 10:51:16 +01:00
Rich Felker
89511cd943 reduce namespace pollution in netinet/udp.h
the affected part of the header is responsible for providing both GNU
and BSD versions of the udphdr structure. previously, the
namespace-polluting GNU names were always used for the actual struct
members, and the BSD names, which are named in a manner resembling a
sane namespace, were always macros defined to expand to the GNU names.
now, unless _GNU_SOURCE is defined, the BSD names are used as the
actual structure members, and the macros and GNU names only come into
play when the application requests them.
2014-02-05 17:25:39 -05:00
Rich Felker
685b1cd4a0 fix use of legacy u_intN_t types in netinet/tcp.h
policy is to avoid using these types except where they are needed for
namespace conformance. C99-style stdint.h types should be used
instead.
2014-02-05 17:22:26 -05:00
Rich Felker
fdaaa68d82 add support for BSD struct tcphdr in netinet/tcp.h
there are two versions of this structure: the BSD version and the GNU
version. previously only the GNU version was supported. the only way
to support both simultaneously is with an anonymous union, which was a
nonstandard extension prior to C11, so some effort is made to avoid
breakage with compilers which do not support anonymous unions.

this commit is based on a patch by Timo Teräs, but with some changes.
in particular, the GNU version of the structure is not exposed unless
_GNU_SOURCE is defined; this both avoids namespace pollution and
dependency on anonymous unions in the default feature profile.
2014-02-05 16:55:30 -05:00
Rich Felker
ad87c2eecf add nonstandard timespec/timeval conversion macros in sys/time.h
these are poorly designed (illogical argument order) and even poorly
implemented (brace issues) on glibc, but unfortunately some software
is using them. we could consider removing them again in the future at
some point if they're documented as deprecated, but for now the
simplest thing to do is just to provide them under _GNU_SOURCE.
2014-02-05 16:34:23 -05:00
Timo Teräs
a0351ee6a7 add NO_ADDRESS macro to netdb.h as an alias for NO_DATA
some applications expect it to be defined, despite the standard making
it impossible for it to ever be returned as a value distinct from
NO_DATA. since these macros are outside the scope of the current
standards, no special effort is made to hide NO_ADDRESS under
conditions where the others are exposed.
2014-02-05 15:58:11 -05:00
Rich Felker
513136efa4 fix namespace violation in sys/shm.h
in fixing this, I've changed the logic from ugly #if/#else blocks
inside the struct shm_info definition to a fixed struct definition and
optional macros to rename the elements. this will be helpful if we
need to move shm_info to a bits header in the future, as it will keep
the feature test logic out of bits.
2014-01-08 19:39:18 -05:00
Rich Felker
a1527a0c3e fix namespace violations in utmpx.h 2014-01-08 19:36:29 -05:00
Rich Felker
acde013522 fix remaining known namespace violations for netinet/in.h
the imr_, imsf_, ip6_, ip6m_, ipi_, ipi6_, SCM_, and SOL_ prefixes are
not in the reserved namespace for this header. thus the constants and
structures using them need to be protected under appropriate feature
test macros.

this also affects some headers which are permitted to include
netinet/in.h, particularly netdb.h and arpa/inet.h.

the SOL_ macros are moved to sys/socket.h where they are in the
reserved namespace (SO*). they are still accessible via netinet/in.h
since it includes sys/socket.h implicitly (which is permitted).

the SCM_SRCRT macro is simply removed, since the definition used for
it, IPV6_RXSRCRT is not defined anywhere. it could be re-added, this
time in sys/socket.h, if the appropriate value can be determined;
however, given that the erroneous definition was not caught, it is
unlikely that any software actually attempts to use SCM_SRCRT.
2014-01-08 18:54:33 -05:00
Rich Felker
1d23b3c913 fix const-correctness of argument to stime
it's unclear what the historical signature for this function was, but
semantically, the argument should be a pointer to const, and this is
what glibc uses. correct programs should not be using this function
anyway, so it's unlikely to matter.
2014-01-07 03:02:14 -05:00
Rich Felker
74998fbec1 fix signedness of pgoff argument to remap_file_pages
both the kernel and glibc agree that this argument is unsigned; the
incorrect type ssize_t came from erroneous man pages.
2014-01-07 02:58:28 -05:00
Rich Felker
3500555db3 fix const-correctness in sigandset/sigorset arguments
this change is consistent with the corresponding glibc functions and
is semantically const-correct. the incorrect argument types without
const seem to have been taken from erroneous man pages.
2014-01-07 02:50:34 -05:00
Rich Felker
2c5e756025 remove sys/sysctl.h
this functionality has essentially always been deprecated in linux,
and was never supported by musl. the presence of the header was
reported to cause some software to attempt to use the nonexistant
function, so removing the header is the cleanest solution.
2014-01-07 02:44:47 -05:00
Rich Felker
2750337379 fix incorrect type for wd argument of inotify_rm_watch
this was wrong since the original commit adding inotify, and I don't
see any explanation for it. not even the man pages have it wrong. it
was most likely a copy-and-paste error.
2014-01-07 02:41:27 -05:00
Rich Felker
dbe221ecff fix argument types for legacy function inet_makeaddr
the type int was taken from seemingly erroneous man pages. glibc uses
in_addr_t (uint32_t), and semantically, the arguments should be
unsigned.
2014-01-06 22:17:24 -05:00
Rich Felker
839cc4e6da const-qualify the address argument to dladdr
this agrees with implementation practice on glibc and BSD systems, and
is the const-correct way to do things; it eliminates warnings from
passing pointers to const. the prototype without const came from
seemingly erroneous man pages.
2014-01-06 22:03:38 -05:00
Rich Felker
1e7a581ad6 add some missing LFS64 aliases for fadvise/fallocate functions 2014-01-06 21:31:17 -05:00
rofl0r
5c81b8fe45 add fanotify syscall wrapper and header 2014-01-02 22:10:45 +01:00
Timo Teräs
7e10f209fb fix struct signalfd_siginfo
ssi_ptr is really 64-bit in kernel, so fix that. assuming sizeof(void*)
for it also caused incorrect padding for 32-bits, as the following
64-bits are aligned to 64-bits (and the padding was not taken into
account), so fix the padding as well. add addr_lsb field while there.
2013-12-29 21:55:21 -05:00
Rich Felker
18144af297 implement legacy function herror
based on patch by Timo Teräs; greatly simplified to use fprintf.
2013-12-20 11:56:16 -05:00
Rich Felker
e36d8a1d74 add sys/quota.h and quotactl syscall wrapper
based on patch by Timo Teräs.
2013-12-20 11:52:10 -05:00
Rich Felker
c91ad4f716 add netinet/igmp.h and multicast groups to netinet/in.h
based on patch by Timo Teräs.
2013-12-20 11:42:03 -05:00
Timo Teräs
e2b4525e3b add TCP_INFO and TCP_MD5SIG socket option related structures 2013-12-20 11:36:26 -05:00
Rich Felker
8708e137d6 add posix_close, accepted for inclusion in the next issue of POSIX
this is purely a wrapper for close since Linux does not support EINTR
semantics for the close syscall.
2013-12-06 21:59:01 -05:00
Szabolcs Nagy
b054137a64 move struct ucred under _GNU_SOURCE in sys/socket.h for clean posix namespace 2013-12-04 21:39:52 +00:00
Szabolcs Nagy
2c2418088d fix SHUT_WR typo in sys/socket.h and duplicate definitions of SHUT_* 2013-12-04 21:38:32 +00:00
Szabolcs Nagy
ccbc365543 fix res_mkquery and res_send prototypes in resolv.h
historically these functions appeared in BSD 4.3 without prototypes,
then in the bind project prototypes were added to resolv.h, but those
were incompatible with the definitions of the implementation.
the bind resolv.h became the defacto api most systems use now, but the
old internal definitions found their way into the linux manuals and thus
into musl.
2013-12-04 21:31:39 +00:00
Rich Felker
83c8fe5058 remove duplicate definition of _PATH_LASTLOG in paths.h 2013-12-03 20:34:36 -05:00
Rich Felker
a223175704 remove now-unnecessary features.h inclusion from fnmatch.h 2013-12-02 02:06:52 -05:00
Rich Felker
bb181ae3b8 expose FNM_* extensions in fnmatch.h without _GNU_SOURCE
at least a couple of these are used on BSD too, and the FNM_*
namespace is reserved in fnmatch.h anyway.
2013-12-02 02:04:58 -05:00
Rich Felker
8c8cf4bbd2 increase TTY_NAME_MAX limit to 32
the old value of 20 was reported by Laurent Bercot as being
insufficient for a reasonable real-world usage case. actual problem
was the internal buffer used by ttyname(), but the implementation of
ttyname uses TTY_NAME_MAX, and for consistency it's best to increase
both. the new value is aligned with glibc.
2013-11-29 12:45:09 -05:00
Rich Felker
a663c93019 adjust fallback INFINITY definition for FLT_EVAL_METHOD==2 case
on archs with excess precision, the floating point constant 1e40f may
be evaluated such that it does not actually produce an infinity.
1e5000f is sufficiently large to produce an infinity for all supported
floating point formats. note that this definition of INFINITY is only
used for old or non-GNUC compilers anyway; despite being a portable,
conforming definition, it leads to erroneous warnings on many
compilers and thus using the builtin is preferred.
2013-11-26 23:26:37 -05:00
Rich Felker
c8a9c22173 restore type of NULL to void * except when used in C++ programs
unfortunately this eliminates the ability of the compiler to diagnose
some dangerous/incorrect usage, but POSIX requires (as an extension to
the C language, i.e. CX shaded) that NULL have type void *. plain C
allows it to be defined as any null pointer constant.

the definition 0L is preserved for C++ rather than reverting to plain
0 to avoid dangerous behavior in non-conforming programs which use
NULL as a variadic sentinel. (it's impossible to use (void *)0 for C++
since C++ lacks the proper implicit pointer conversions, and other
popular alternatives like the GCC __null extension seem non-conforming
to the standard's requirements.)
2013-11-24 21:42:55 -05:00
Michael Forney
642936d6dd Fix dn_comp prototype and add stub
This function is used by ping6 from iputils.
2013-11-24 09:39:30 -05:00
Szabolcs Nagy
10c8b7148b use 0 instead of NULL in headers where NULL is not defined
some macros in sys/mtio.h and syslog.h used NULL without defining it
2013-11-24 00:34:07 +00:00
Szabolcs Nagy
b0e9d57711 add TCP_NOTSENT_LOWAT tcp socket option, new in linux v3.12 2013-11-23 23:04:55 +00:00
Timo Teräs
4b2c8fee35 add linux tcp state enums 2013-11-23 16:57:53 -05:00
Timo Teräs
7c0ca4d361 add multicast structures from RFC 3678 to netinet/in.h
and use _GNU_SOURCE || _BSD_SOURCE guards for all of the RFC 3678
namespace polluting things like glibc/uclibc does.
2013-11-23 16:56:43 -05:00
rofl0r
8ff810d779 timeradd/timersub: cast result to void to get rid of warnings
previously:
timersub(&now, t, &diff);

warning: value computed is not used [-Wunused-value]
2013-11-23 13:01:53 +01:00
Szabolcs Nagy
a516077feb add legacy getloadavg api 2013-11-21 01:59:43 +00:00
Szabolcs Nagy
5d01ab4ac6 math: add (obsolete) bsd drem and finite functions 2013-11-21 01:16:49 +00:00
Rich Felker
46db37289f write floating point limit constants to 21 significant decimal places
this is enough to produce the correct value even if the constant is
interpreted as 80-bit extended precision, which matters on archs with
excess precision (FLT_EVAL_METHOD==2) under at least some
interpretations of the C standard. the shorter representations, while
correct if converted to the nominal precision at translation time,
could produce an incorrect value at extended precision, yielding
results such as (double)DBL_MAX != DBL_MAX.
2013-11-20 17:40:33 -05:00
Rich Felker
f5980e330a adjust sys/wait.h not to produde errors in strict ISO C feature profile
siginfo_t is not available from signal.h when the strict ISO C feature
profile (e.g. passing -std=c99 to gcc without defining any other
feature test macros) is used, but the type is needed to declare
waitid. using sys/wait.h (or any POSIX headers) in strict ISO C mode
is an application bug, but in the interest of compatibility, it's best
to avoid producing gratuitous errors. the simplest fix I could find is
suppressing the declaration of waitid (and also signal.h inclusion,
since it's not needed for anything else) in this case, while still
exposing everything else in sys/wait.h
2013-11-09 00:04:02 -05:00
Rich Felker
4ecf33614b fix inttypes.h PRI and SCN macros for [u]intptr_t types
while using "l" unconditionally gave the right behavior due to
matching sizes/representations, it was technically UB and produced
compiler warnings with format string checking.
2013-10-30 14:52:55 -04:00