tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

check_op.cc (2220B)


      1 // Copyright 2020 The Chromium Authors
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/check_op.h"
      6 
      7 #include <string.h>
      8 
      9 #include <algorithm>
     10 #include <cstdio>
     11 #include <sstream>
     12 
     13 #include "base/logging.h"
     14 
     15 namespace logging {
     16 
     17 char* CheckOpValueStr(int v) {
     18  char buf[50];
     19  snprintf(buf, sizeof(buf), "%d", v);
     20  return strdup(buf);
     21 }
     22 
     23 char* CheckOpValueStr(unsigned v) {
     24  char buf[50];
     25  snprintf(buf, sizeof(buf), "%u", v);
     26  return strdup(buf);
     27 }
     28 
     29 char* CheckOpValueStr(long v) {
     30  char buf[50];
     31  snprintf(buf, sizeof(buf), "%ld", v);
     32  return strdup(buf);
     33 }
     34 
     35 char* CheckOpValueStr(unsigned long v) {
     36  char buf[50];
     37  snprintf(buf, sizeof(buf), "%lu", v);
     38  return strdup(buf);
     39 }
     40 
     41 char* CheckOpValueStr(long long v) {
     42  char buf[50];
     43  snprintf(buf, sizeof(buf), "%lld", v);
     44  return strdup(buf);
     45 }
     46 
     47 char* CheckOpValueStr(unsigned long long v) {
     48  char buf[50];
     49  snprintf(buf, sizeof(buf), "%llu", v);
     50  return strdup(buf);
     51 }
     52 
     53 char* CheckOpValueStr(const void* v) {
     54  char buf[50];
     55  snprintf(buf, sizeof(buf), "%p", v);
     56  return strdup(buf);
     57 }
     58 
     59 char* CheckOpValueStr(std::nullptr_t v) {
     60  return strdup("nullptr");
     61 }
     62 
     63 char* CheckOpValueStr(const std::string& v) {
     64  return strdup(v.c_str());
     65 }
     66 
     67 char* CheckOpValueStr(std::string_view v) {
     68  // Ideally this would be `strndup`, but `strndup` is not portable.
     69  char* ret = static_cast<char*>(malloc(v.size() + 1));
     70  if (ret) {
     71    std::copy(v.begin(), v.end(), ret);
     72    ret[v.size()] = 0;
     73  }
     74  return ret;
     75 }
     76 
     77 char* CheckOpValueStr(double v) {
     78  char buf[50];
     79  snprintf(buf, sizeof(buf), "%.6lf", v);
     80  return strdup(buf);
     81 }
     82 
     83 char* StreamValToStr(const void* v,
     84                     void (*stream_func)(std::ostream&, const void*)) {
     85  std::stringstream ss;
     86  stream_func(ss, v);
     87  return strdup(ss.str().c_str());
     88 }
     89 
     90 char* CreateCheckOpLogMessageString(const char* expr_str,
     91                                    char* v1_str,
     92                                    char* v2_str) {
     93  std::stringstream ss;
     94  ss << "Check failed: " << expr_str << " (" << v1_str << " vs. " << v2_str
     95     << ")";
     96  free(v1_str);
     97  free(v2_str);
     98  return strdup(ss.str().c_str());
     99 }
    100 
    101 }  // namespace logging