DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (5b81998bb7ab)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef CRASHREPORTER_H__
#define CRASHREPORTER_H__

#ifdef _MSC_VER
# pragma warning( push )
// Disable exception handler warnings.
# pragma warning( disable : 4530 )
#endif

#include <string>
#include <map>
#include <vector>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <fstream>

#define MAX_COMMENT_LENGTH   500

#if defined(XP_WIN32)

#include <windows.h>

#define UI_SNPRINTF _snprintf
#define UI_DIR_SEPARATOR "\\"

std::string WideToUTF8(const std::wstring& wide, bool* success = 0);

#else

#define UI_SNPRINTF snprintf
#define UI_DIR_SEPARATOR "/"

#endif

typedef std::map<std::string, std::string> StringTable;

#define ST_CRASHREPORTERTITLE        "CrashReporterTitle"
#define ST_CRASHREPORTERVENDORTITLE  "CrashReporterVendorTitle"
#define ST_CRASHREPORTERERROR        "CrashReporterErrorText"
#define ST_CRASHREPORTERPRODUCTERROR "CrashReporterProductErrorText2"
#define ST_CRASHREPORTERHEADER       "CrashReporterSorry"
#define ST_CRASHREPORTERDESCRIPTION  "CrashReporterDescriptionText2"
#define ST_CRASHREPORTERDEFAULT      "CrashReporterDefault"
#define ST_VIEWREPORT                "Details"
#define ST_VIEWREPORTTITLE           "ViewReportTitle"
#define ST_COMMENTGRAYTEXT           "CommentGrayText"
#define ST_EXTRAREPORTINFO           "ExtraReportInfo"
#define ST_CHECKSUBMIT               "CheckSendReport"
#define ST_CHECKURL                  "CheckIncludeURL"
#define ST_CHECKEMAIL                "CheckAllowEmail"
#define ST_EMAILGRAYTEXT             "EmailGrayText"
#define ST_REPORTPRESUBMIT           "ReportPreSubmit2"
#define ST_REPORTDURINGSUBMIT        "ReportDuringSubmit2"
#define ST_REPORTSUBMITSUCCESS       "ReportSubmitSuccess"
#define ST_SUBMITFAILED              "ReportSubmitFailed"
#define ST_QUIT                      "Quit2"
#define ST_RESTART                   "Restart"
#define ST_OK                        "Ok"
#define ST_CLOSE                     "Close"

#define ST_ERROR_BADARGUMENTS        "ErrorBadArguments"
#define ST_ERROR_EXTRAFILEEXISTS     "ErrorExtraFileExists"
#define ST_ERROR_EXTRAFILEREAD       "ErrorExtraFileRead"
#define ST_ERROR_EXTRAFILEMOVE       "ErrorExtraFileMove"
#define ST_ERROR_DUMPFILEEXISTS      "ErrorDumpFileExists"
#define ST_ERROR_DUMPFILEMOVE        "ErrorDumpFileMove"
#define ST_ERROR_NOPRODUCTNAME       "ErrorNoProductName"
#define ST_ERROR_NOSERVERURL         "ErrorNoServerURL"
#define ST_ERROR_NOSETTINGSPATH      "ErrorNoSettingsPath"
#define ST_ERROR_CREATEDUMPDIR       "ErrorCreateDumpDir"
#define ST_ERROR_ENDOFLIFE           "ErrorEndOfLife"

//=============================================================================
// implemented in crashreporter.cpp
//=============================================================================

namespace CrashReporter {
  extern StringTable  gStrings;
  extern std::string  gSettingsPath;
  extern int          gArgc;
  extern char**       gArgv;

  void UIError(const std::string& message);

  // The UI finished sending the report
  void SendCompleted(bool success, const std::string& serverResponse);

  bool ReadStrings(std::istream& in,
                   StringTable& strings,
                   bool unescape);
  bool ReadStringsFromFile(const std::string& path,
                           StringTable& strings,
                           bool unescape);
  bool WriteStrings(std::ostream& out,
                    const std::string& header,
                    StringTable& strings,
                    bool escape);
  bool WriteStringsToFile(const std::string& path,
                          const std::string& header,
                          StringTable& strings,
                          bool escape);
  void LogMessage(const std::string& message);
  void DeleteDump();
  bool ShouldEnableSending();

  static const unsigned int kSaveCount = 10;
}

//=============================================================================
// implemented in the platform-specific files
//=============================================================================

bool UIInit();
void UIShutdown();

// Run the UI for when the app was launched without a dump file
void UIShowDefaultUI();

// Run the UI for when the app was launched with a dump file
// Return true if the user sent (or tried to send) the crash report,
// false if they chose not to, and it should be deleted.
bool UIShowCrashUI(const std::string& dumpfile,
                   const StringTable& queryParameters,
                   const std::string& sendURL,
                   const std::vector<std::string>& restartArgs);

void UIError_impl(const std::string& message);

bool UIGetIniPath(std::string& path);
bool UIGetSettingsPath(const std::string& vendor,
                       const std::string& product,
                       std::string& settingsPath);
bool UIEnsurePathExists(const std::string& path);
bool UIFileExists(const std::string& path);
bool UIMoveFile(const std::string& oldfile, const std::string& newfile);
bool UIDeleteFile(const std::string& oldfile);
std::ifstream* UIOpenRead(const std::string& filename);
std::ofstream* UIOpenWrite(const std::string& filename, bool append=false);
void UIPruneSavedDumps(const std::string& directory);

#ifdef _MSC_VER
# pragma warning( pop )
#endif

#endif