mirror of
https://github.com/FAUSheppy/colorredstderr-mirror
synced 2025-12-09 16:38:32 +01:00
Hook __swbuf() on FreeBSD.
Coloring works fine now on FreeBSD (with some minor issues). Tests still fail though.
This commit is contained in:
@@ -59,7 +59,7 @@ AC_CHECK_FUNCS([execvpe])
|
||||
dnl These are not in POSIX.
|
||||
AC_CHECK_FUNCS([fwrite_unlocked fputs_unlocked fputc_unlocked])
|
||||
dnl Internal functions in libc implementations which must be hooked.
|
||||
AC_CHECK_FUNCS([__overflow])
|
||||
AC_CHECK_FUNCS([__overflow __swbuf])
|
||||
|
||||
dnl Thanks to gperftools' configure.ac (https://code.google.com/p/gperftools).
|
||||
AC_MSG_CHECKING([for __builtin_expect])
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
/* In Clang when compiling with hardening flags (fortify) on Debian Wheezy. */
|
||||
#undef printf
|
||||
#undef fprintf
|
||||
/* On FreeBSD (9.1), __swbuf() is used instead of these macros. */
|
||||
#ifdef HAVE___SWBUF
|
||||
# undef putc
|
||||
# undef putc_unlocked
|
||||
# undef putchar
|
||||
# undef putchar_unlocked
|
||||
#endif
|
||||
|
||||
|
||||
/* Used by various functions, including debug(). */
|
||||
@@ -279,6 +286,13 @@ HOOK_FILE1(int, putchar_unlocked, stdout,
|
||||
/* _IO_FILE is glibc's representation of FILE. */
|
||||
HOOK_FILE2(int, __overflow, f, _IO_FILE *, f, int, ch)
|
||||
#endif
|
||||
/* Same for FreeBSD's libc. However it's more aggressive: The inline writing
|
||||
* and __swbuf() are also used for normal output (e.g. putc()). Writing to
|
||||
* stderr is still fine; it always calls __swbuf() as stderr is always
|
||||
* unbufferd. */
|
||||
#ifdef HAVE___SWBUF
|
||||
HOOK_FILE2(int, __swbuf, f, int, c, FILE *, f)
|
||||
#endif
|
||||
|
||||
/* perror(3) */
|
||||
HOOK_VOID1(void, perror, STDERR_FILENO,
|
||||
|
||||
Reference in New Issue
Block a user