Getprogname
Added `getprogname()` and `setprogname()` for all BSDs and Solaris (including Mac OS X).
Added `program_invocation_short_name` global, for Linux (glibc and Musl) which is effectively the same thing, and is what compatibility libraries like `libbsd` use to implement `getprogname()`.
Added `__progname` global for Android, which, whilst not quite the same as `getprogname` or `program_invocation_short_name`, is better than using argv[0], as it (a) avoids a common bug with no arguments (b) avoids a common bug with a NULL string in argv[0] and (c) incorporates Android's chosen name for an unknown process.
Adding program_invocation_short_name for Linux (Musl and glibc).
Adding __progname for Android. This is a little different, but
is a safer alternative to using argv[0], which may not exist, and
includes Android's default application name (currently '<unknown>').
Adding these functions and externs means it is possible for all
but Windows applications to safely discover their
name, rather than rely on argv[0] parsing, /proc/self/exe, etc.
Add correctly sized structs and types for Android aarch64.
So far both android x86_64 and aarch64 configurations used incorrect types from 32-bit architecture.
This PR updates only the aarch64, because it is more common. The x86_64 may be also incorrect, but is out of scope of this PR.
Adding syslog functions, constants and structs
This commit adds the functions:-
- syslog
- openlog
- closelog
- setlogmask
It adds LOG_* constants.
It adds the `CODE` struct used by the `#define` definitions `prioritynames` and `facilitynames`.
It does not add:-
- the function `vsyslog`; this is an extension to POSIX and uses va_list macros;
- the `#define`s `prioritynames` and `facilitynames`, as usage is not common
- rust functions mirroring the macros:-
- LOG_PRI
- LOG_MAKEPRI
- LOG_MASK
- LOG_UPTO
- LOG_FAC
* `CODE` is included in case a third-party unsafe C function returns or takes it.
Removed CODE, as its definition and name varies too wildy and I
have no current code using it to test permutations with.
Moved LOG_NFACILITIES down, as Mac OS X defines this value
differently.
Added Mac OS X specific LOG_* facilities.
Added FreeBSD / DragonFly BSD specific LOG_* facilities.
Moved LOG_PERROR down, as all platforms bar Solaris define this.
Moved LOG_CRON down, as Solaris defines this with a different value.
Moved LOG_AUTHPRIV and LOG_FTP down, as all platforms bar Solaris
define these.
Looks like Solaris is suffering from the bit rot of commercial Unix...
Added strnlen function to all platforms.
strnlen is used to find the length of a C string that may be
lacking a terminal NUL character. Whilst it is possible to
implement the equivalent functionality in rust code, it is
cleaner, simpler and removes the need for duplication of tricky
functionality to get right. It also makes it easier to port
C code snippets to rust. In my case, it's needed for dealing with
the result of `gethostname`.
Note that strnlen is not part of POSIX or C99, but is present on all major platforms.
strnlen is used to find the length of a C string that may be
lacking a terminal NUL character. Whilst it is possible to
implement the equivalent functionality in rust code, it is
cleaner, simpler and removes the need for duplication of tricky
functionality to get right. It also makes it easier to port
C code snippets to rust.
Note that strnlen is not part of POSIX or C99.
Added _SC_HOST_NAME_MAX for FreeBSD, DragonFly, BitRig and Linux (glibc and musl)
I'd have liked to also add NetBSD and OpenBSD, but I can't find where _SC_HOST_NAME_MAX is defined.
This commit adds the functions:-
- syslog
- openlog
- closelog
- setlogmask
It adds LOG_* constants.
It adds the CODE struct used by the #define definitions prioritynames and facilitynames.
It does not add:-
- the function vsyslog; this is an extension to POSIX and uses va_list macros;
- the #defines prioritynames and facilitynames, as usage is not common
- rust functions mirroring the macros:-
- LOG_PRI
- LOG_MAKEPRI
- LOG_MASK
- LOG_UPTO
- LOG_FAC
* CODE is included in case a third-party unsafe C function returns or takes it.
OS X: add various process status tests defined by wait.h
Adds the various process test macros specified in the wait(2) manpage on OS X. ```WCOREDUMP``` is implemented BSD-wide as it seems to be the only macro whose definition is constant across the BSDs.
linux: Add prlimit(2) and prlimit64(2)
As with `getrlimit` and `setrlimit`, the glibc wrappers have a non-`int`
for the `resource` argument, eg:
extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
const struct rlimit *__new_limit,
struct rlimit *__old_limit) __THROW;
As with `getrlimit` and `setrlimit`, the glibc wrappers have a non-`int`
for the `resource` argument, eg:
extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
const struct rlimit *__new_limit,
struct rlimit *__old_limit) __THROW;
notbsd: Deduplicate definitions
A bunch of definitions were duplicated across, eg, android and linux.
This commit pulls these up to higher levels where they can be shared.
in order to advise contributors to locally test their patches.
Also update ctest to include a fix on rerun-if-changed so that human
developers doing trial & error can properly test their latest code.
Signed-off-by: NODA, Kai <nodakai@gmail.com>
Add support for arm-unknown-linux-musleabi{,hf} targets.
These targets will be similar to the x86_64-unknown-linux-musl
target, in that they'll use MUSL libc to allow fully static binaries
to be generated. To remain consistent with the naming of existing
ARM targets, as well as with the standard naming of MUSL toolchains,
we'll use `musleabi` and `musleabihf` as the target environment
names (analogous to `gnueabi` and `gnueabihf`).
Most of these changes just extend the special casing for x86_64 MUSL
targets to the ARM ones as well.
These targets will be similar to the x86_64-unknown-linux-musl
target, in that they'll use MUSL libc to allow fully static binaries
to be generated. To remain consistent with the naming of existing
ARM targets, as well as with the standard naming of MUSL toolchains,
we'll use `musleabi` and `musleabihf` as the target environment
names (analogous to `gnueabi` and `gnueabihf`).
Most of these changes just extend the special casing for x86_64 MUSL
targets to the ARM ones as well.