toolkit/crashreporter/google-breakpad/src/common/logging.cc

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1 // Copyright (c) 2007, Google Inc.
michael@0 2 // All rights reserved.
michael@0 3 //
michael@0 4 // Redistribution and use in source and binary forms, with or without
michael@0 5 // modification, are permitted provided that the following conditions are
michael@0 6 // met:
michael@0 7 //
michael@0 8 // * Redistributions of source code must retain the above copyright
michael@0 9 // notice, this list of conditions and the following disclaimer.
michael@0 10 // * Redistributions in binary form must reproduce the above
michael@0 11 // copyright notice, this list of conditions and the following disclaimer
michael@0 12 // in the documentation and/or other materials provided with the
michael@0 13 // distribution.
michael@0 14 // * Neither the name of Google Inc. nor the names of its
michael@0 15 // contributors may be used to endorse or promote products derived from
michael@0 16 // this software without specific prior written permission.
michael@0 17 //
michael@0 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
michael@0 22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
michael@0 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
michael@0 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
michael@0 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
michael@0 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
michael@0 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
michael@0 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 29
michael@0 30 // logging.cc: Breakpad logging
michael@0 31 //
michael@0 32 // See logging.h for documentation.
michael@0 33 //
michael@0 34 // Author: Mark Mentovai
michael@0 35
michael@0 36 #include <assert.h>
michael@0 37 #include <errno.h>
michael@0 38 #include <stdio.h>
michael@0 39 #include <string.h>
michael@0 40 #include <time.h>
michael@0 41
michael@0 42 #include <string>
michael@0 43
michael@0 44 #include "common/using_std_string.h"
michael@0 45 #include "common/logging.h"
michael@0 46 #include "common/pathname_stripper.h"
michael@0 47
michael@0 48 #ifdef _WIN32
michael@0 49 #define snprintf _snprintf
michael@0 50 #endif
michael@0 51
michael@0 52 #ifdef __ANDROID__
michael@0 53 # include <android/log.h>
michael@0 54 #endif
michael@0 55
michael@0 56 namespace google_breakpad {
michael@0 57
michael@0 58 LogStream::LogStream(std::ostream &stream, Severity severity,
michael@0 59 const char *file, int line)
michael@0 60 : stream_(stream) {
michael@0 61 time_t clock;
michael@0 62 time(&clock);
michael@0 63 struct tm tm_struct;
michael@0 64 #ifdef _WIN32
michael@0 65 localtime_s(&tm_struct, &clock);
michael@0 66 #else
michael@0 67 localtime_r(&clock, &tm_struct);
michael@0 68 #endif
michael@0 69 char time_string[20];
michael@0 70 strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", &tm_struct);
michael@0 71
michael@0 72 const char *severity_string = "UNKNOWN_SEVERITY";
michael@0 73 switch (severity) {
michael@0 74 case SEVERITY_INFO:
michael@0 75 severity_string = "INFO";
michael@0 76 break;
michael@0 77 case SEVERITY_ERROR:
michael@0 78 severity_string = "ERROR";
michael@0 79 break;
michael@0 80 }
michael@0 81
michael@0 82 str_ << time_string << ": " << PathnameStripper::File(file) << ":" <<
michael@0 83 line << ": " << severity_string << ": ";
michael@0 84 }
michael@0 85
michael@0 86 LogStream::~LogStream() {
michael@0 87 #ifdef __ANDROID__
michael@0 88 __android_log_print(ANDROID_LOG_ERROR,
michael@0 89 "Profiler", "%s", str_.str().c_str());
michael@0 90 #else
michael@0 91 stream_ << str_.str();
michael@0 92 stream_ << std::endl;
michael@0 93 #endif
michael@0 94 }
michael@0 95
michael@0 96 string HexString(uint32_t number) {
michael@0 97 char buffer[11];
michael@0 98 snprintf(buffer, sizeof(buffer), "0x%x", number);
michael@0 99 return string(buffer);
michael@0 100 }
michael@0 101
michael@0 102 string HexString(uint64_t number) {
michael@0 103 char buffer[19];
michael@0 104 snprintf(buffer, sizeof(buffer), "0x%" PRIx64, number);
michael@0 105 return string(buffer);
michael@0 106 }
michael@0 107
michael@0 108 string HexString(int number) {
michael@0 109 char buffer[19];
michael@0 110 snprintf(buffer, sizeof(buffer), "0x%x", number);
michael@0 111 return string(buffer);
michael@0 112 }
michael@0 113
michael@0 114 int ErrnoString(string *error_string) {
michael@0 115 assert(error_string);
michael@0 116
michael@0 117 // strerror isn't necessarily thread-safe. strerror_r would be preferrable,
michael@0 118 // but GNU libc uses a nonstandard strerror_r by default, which returns a
michael@0 119 // char* (rather than an int success indicator) and doesn't necessarily
michael@0 120 // use the supplied buffer.
michael@0 121 error_string->assign(strerror(errno));
michael@0 122 return errno;
michael@0 123 }
michael@0 124
michael@0 125 } // namespace google_breakpad
michael@0 126
michael@0 127 bool is_power_of_2(uint64_t x_in)
michael@0 128 {
michael@0 129 uint64_t x = x_in;
michael@0 130 x = x | (x >> 1);
michael@0 131 x = x | (x >> 2);
michael@0 132 x = x | (x >> 4);
michael@0 133 x = x | (x >> 8);
michael@0 134 x = x | (x >> 16);
michael@0 135 x = x | (x >> 32);
michael@0 136 x = x - (x >> 1);
michael@0 137 // x has now been rounded down to the nearest power of 2 <= x_in.
michael@0 138 return x == x_in;
michael@0 139 }

mercurial