| Index: third_party/crazy_linker/crazy_linker/src/crazy_linker_debug.cpp
|
| diff --git a/third_party/crazy_linker/crazy_linker/src/crazy_linker_debug.cpp b/third_party/crazy_linker/crazy_linker/src/crazy_linker_debug.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..eb571571320371641a74fd35895b3ade1d24b908
|
| --- /dev/null
|
| +++ b/third_party/crazy_linker/crazy_linker/src/crazy_linker_debug.cpp
|
| @@ -0,0 +1,69 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "crazy_linker_debug.h"
|
| +
|
| +#include <errno.h>
|
| +#include <string.h>
|
| +
|
| +#ifdef __ANDROID__
|
| +#include <android/log.h>
|
| +#endif
|
| +#include <stdarg.h>
|
| +#include <stdio.h>
|
| +
|
| +namespace crazy {
|
| +
|
| +#if CRAZY_DEBUG
|
| +
|
| +namespace {
|
| +
|
| +void LogArgs(const char* fmt, va_list args, bool print_error, int error) {
|
| + const size_t buffer_size = 4096;
|
| + char* buffer = reinterpret_cast<char*>(::malloc(buffer_size));
|
| + int ret;
|
| +
|
| + ret = vsnprintf(buffer, buffer_size, fmt, args);
|
| + if (ret >= static_cast<int>(buffer_size))
|
| + ret = static_cast<int>(buffer_size) - 1;
|
| +
|
| + if (print_error) {
|
| + strlcat(buffer, ": ", buffer_size);
|
| + strlcat(buffer, strerror(error), buffer_size);
|
| + }
|
| +
|
| + // First, send to stderr.
|
| + fprintf(stderr, "%.*s", ret, buffer);
|
| +
|
| +#ifdef __ANDROID__
|
| + // Then to the Android log.
|
| + __android_log_write(ANDROID_LOG_INFO, "crazy_linker", buffer);
|
| +#endif
|
| +
|
| + ::free(buffer);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +void Log(const char* fmt, ...) {
|
| + int old_errno = errno;
|
| + va_list args;
|
| + va_start(args, fmt);
|
| + LogArgs(fmt, args, false, -1);
|
| + va_end(args);
|
| + errno = old_errno;
|
| +}
|
| +
|
| +void LogErrno(const char* fmt, ...) {
|
| + int old_errno = errno;
|
| + va_list args;
|
| + va_start(args, fmt);
|
| + LogArgs(fmt, args, true, old_errno);
|
| + va_end(args);
|
| + errno = old_errno;
|
| +}
|
| +
|
| +#endif // CRAZY_DEBUG
|
| +
|
| +} // namespace crazy
|
|
|