Skip to content

Commit

Permalink
PR #1553: Adapt to syscall(2) removal in OpenBSD
Browse files Browse the repository at this point in the history
Imported from GitHub PR #1553

OpenBSD will remove its generic syscall(2) interface, so setting the ABSL_HAVE_SYSCALL_WRITE define will result in a linking failure soon.

Make direct use of the write(2) syscall instead. OpenBSD's libc does not do any buffering for write, so there is no change of behavior.

A [variant of this patch][1] has been in use since early this year in OpenBSD's ports. There's no need to set ABSL_LOW_LEVEL_WRITE_SUPPORTED since that's already done a few lines up.

[1]: openbsd/ports@5f9e56c
Merge 0dcc88a into b841db2

Merging this change closes #1553

COPYBARA_INTEGRATE_REVIEW=#1553 from botovq:openbsd-syscall 0dcc88a
PiperOrigin-RevId: 576552197
Change-Id: I13466703ddc9d50edf87da5d0c291aad642af49a
  • Loading branch information
botovq authored and copybara-github committed Oct 25, 2023
1 parent b841db2 commit 4a6ea63
Showing 1 changed file with 6 additions and 9 deletions.
15 changes: 6 additions & 9 deletions absl/base/internal/raw_logging.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@
// ABSL_HAVE_SYSCALL_WRITE is defined when the platform provides the syscall
// syscall(SYS_write, /*int*/ fd, /*char* */ buf, /*size_t*/ len);
// for low level operations that want to avoid libc.
#if (defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)) && \
!defined(__ANDROID__)
#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
#include <sys/syscall.h>
#define ABSL_HAVE_SYSCALL_WRITE 1
#define ABSL_LOW_LEVEL_WRITE_SUPPORTED 1
Expand Down Expand Up @@ -93,8 +92,7 @@ constexpr char kTruncated[] = " ... (message truncated)\n";
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap)
ABSL_PRINTF_ATTRIBUTE(3, 0);
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap) {
if (*size < 0)
return false;
if (*size < 0) return false;
int n = vsnprintf(*buf, static_cast<size_t>(*size), format, ap);
bool result = true;
if (n < 0 || n > *size) {
Expand Down Expand Up @@ -122,8 +120,7 @@ constexpr int kLogBufSize = 3000;
bool DoRawLog(char** buf, int* size, const char* format, ...)
ABSL_PRINTF_ATTRIBUTE(3, 4);
bool DoRawLog(char** buf, int* size, const char* format, ...) {
if (*size < 0)
return false;
if (*size < 0) return false;
va_list ap;
va_start(ap, format);
int n = vsnprintf(*buf, static_cast<size_t>(*size), format, ap);
Expand Down Expand Up @@ -242,8 +239,8 @@ void AsyncSignalSafeWriteError(const char* s, size_t len) {
_write(/* stderr */ 2, s, static_cast<unsigned>(len));
#else
// stderr logging unsupported on this platform
(void) s;
(void) len;
(void)s;
(void)len;
#endif
}

Expand All @@ -258,7 +255,7 @@ void RawLog(absl::LogSeverity severity, const char* file, int line,
bool RawLoggingFullySupported() {
#ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
return true;
#else // !ABSL_LOW_LEVEL_WRITE_SUPPORTED
#else // !ABSL_LOW_LEVEL_WRITE_SUPPORTED
return false;
#endif // !ABSL_LOW_LEVEL_WRITE_SUPPORTED
}
Expand Down

0 comments on commit 4a6ea63

Please sign in to comment.