* Fix PERROR to match musl/glibc better
* More unit tests + enabled on Linux
* Pack priority and facility into one i32 and check the bits with
bitflags
* Add LOG_UPTO (logic is straight from musl)
Not done:
* "%m" - this could just be added to printf
* LOG_CONS
Linux's syslog is a local socket, so this uses the recent UDS work.
* Most of redox.rs is refactored into mod.rs now which has all of the C
facing functions and consts.
* I wrapped the global logger in a Mutex instead of a RwLock. The logger
is almost always locked for writing so a Mutex is simpler as RwLock
provides no benefits.
* I implemented LOG_PERROR which also prints errors to stderr as well as
the log.
* Syslog should be sys/syslog.h with syslog.h as an alias (the
original code only had syslog.h).
This test should rename disabled until redox-os/relibc#212 is fixed. The
test works on Linux so it should work on Redox eventually too.
The issue is non-trivial because it involves a syscall, frename, that
may need to be redesigned. frename requires a file descriptor, but
opening a file resolves links which in turn fails with broken symlinks.
Our strptime implementation uses subformatting to handle specifiers that
expand to other specifiers. For example, '%T' expands to "%H:%M%:%S".
Relibc calls strptime again to handle '%T' by expanding it.
However, our strptime zeroes out struct tm which clobbers old values. If
strptime is called with a format string like "%D%t%T", the set values
for '%D' are clobbered.
Zeroing out the struct is extra, unneeded work as well. The user may
want to preserve old values. We don't read from struct tm so we don't
have to worry about invalid values. Finally, `musl` and `glibc` don't
clear the values either so we can default to their behavior.