From f3ea24d72e6a1a1c77e08b79e886a3721f000823 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Fri, 30 Jun 2023 09:32:16 -0700 Subject: Rolls back use of emscripten_errn as some implementations may not be compatible. PiperOrigin-RevId: 544677169 Change-Id: I98874c5c8d1c9a057958b63e2b3c4fdd5daccd39 --- absl/base/internal/raw_logging.cc | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'absl/base') diff --git a/absl/base/internal/raw_logging.cc b/absl/base/internal/raw_logging.cc index 1904026f..c866d957 100644 --- a/absl/base/internal/raw_logging.cc +++ b/absl/base/internal/raw_logging.cc @@ -206,31 +206,27 @@ void DefaultInternalLog(absl::LogSeverity severity, const char* file, int line, } // namespace void AsyncSignalSafeWriteError(const char* s, size_t len) { - if (!len) return; absl::base_internal::ErrnoSaver errno_saver; #if defined(__EMSCRIPTEN__) // In WebAssembly, bypass filesystem emulation via fwrite. - if (s[len - 1] == '\n') { - // Skip a trailing newline character as emscripten_errn adds one itself. - len--; - } - // emscripten_errn introduced in emscripten 3.1.41 -#if ABSL_INTERNAL_EMSCRIPTEN_VERSION >= 3001041 - emscripten_errn(s, len); -#else + // TODO(b/282811932): Avoid this copy if these emscripten functions can + // be updated to accept size directly. char buf[kLogBufSize]; if (len >= kLogBufSize) { len = kLogBufSize - 1; - constexpr size_t trunc_len = sizeof(kTruncated) - 2; - memcpy(buf + len - trunc_len, kTruncated, trunc_len); + size_t trunc_len = sizeof(kTruncated) - 2; + strncpy(buf + len - trunc_len, kTruncated, trunc_len); buf[len] = '\0'; len -= trunc_len; - } else { + } else if (len && s[len - 1] == '\n') { + len--; + } + strncpy(buf, s, len); + if (len) { buf[len] = '\0'; + // Skip a trailing newline character as emscripten_err adds one itself. + _emscripten_err(buf); } - memcpy(buf, s, len); - _emscripten_err(buf); -#endif #elif defined(ABSL_HAVE_SYSCALL_WRITE) // We prefer calling write via `syscall` to minimize the risk of libc doing // something "helpful". -- cgit v1.2.3