22 #include "absl/base/macros.h"
23 #include "absl/debugging/stacktrace.h"
28 #if !defined(_MSC_VER)
29 #include <sys/syscall.h>
30 #define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
34 #define safe_write(fd, s, len) _write(fd, s, len)
37 #if defined(_MSC_VER) && !defined(__MINGW32__)
38 enum { STDIN_FILENO = 0, STDOUT_FILENO = 1, STDERR_FILENO = 2 };
51 static bool DoRawLog(
char** buf,
int* size,
const char* format, ...) {
54 int n = vsnprintf(*buf, *size, format, ap);
56 if (n < 0 || n > *size)
return false;
63 inline static bool VADoRawLog(
char** buf,
int* size,
const char* format,
65 int n = vsnprintf(*buf, *size, format, ap);
66 if (n < 0 || n > *size)
return false;
78 const char* format, ...) {
79 if (!(absl::GetFlag(FLAGS_logtostderr) ||
80 severity >= absl::GetFlag(FLAGS_stderrthreshold) ||
81 absl::GetFlag(FLAGS_alsologtostderr) ||
88 int size =
sizeof(buffer);
91 DoRawLog(&buf, &size,
"%c0000 00:00:00.000000 %5u %s:%d] RAW: ",
96 const char* msg_start = buf;
97 const int msg_size = size;
100 va_start(ap, format);
101 bool no_chop =
VADoRawLog(&buf, &size, format, ap);
106 DoRawLog(&buf, &size,
"RAW_LOG ERROR: The Message was too long!\n");
112 safe_write(STDERR_FILENO, buffer, strlen(buffer));