diff --git a/src/client/windows/handler/exception_handler.cc b/src/client/windows/handler/exception_handler.cc index ba5c2653..e58dea65 100644 --- a/src/client/windows/handler/exception_handler.cc +++ b/src/client/windows/handler/exception_handler.cc @@ -27,11 +27,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include +#include #include #include "client/windows/handler/exception_handler.h" +#include "common/windows/guid_string.h" namespace google_airbag { @@ -42,9 +43,9 @@ ExceptionHandler::ExceptionHandler(const wstring &dump_path, void *callback_context, bool install_handler) : callback_(callback), callback_context_(callback_context), - dump_path_(dump_path), next_minidump_id_(NULL), - dbghelp_module_(NULL), minidump_write_dump_(NULL), - previous_handler_(current_handler_), previous_filter_(NULL) { + dump_path_(dump_path), dbghelp_module_(NULL), + minidump_write_dump_(NULL), previous_handler_(current_handler_), + previous_filter_(NULL) { UpdateNextID(); dbghelp_module_ = LoadLibrary(L"dbghelp.dll"); if (dbghelp_module_) { @@ -61,9 +62,6 @@ ExceptionHandler::~ExceptionHandler() { if (dbghelp_module_) { FreeLibrary(dbghelp_module_); } - if (next_minidump_id_) { - RpcStringFree(&next_minidump_id_); - } if (current_handler_ == this) { SetUnhandledExceptionFilter(previous_filter_); current_handler_ = previous_handler_; @@ -95,7 +93,7 @@ bool ExceptionHandler::WriteMinidump(const wstring &dump_path, bool ExceptionHandler::WriteMinidumpWithException(EXCEPTION_POINTERS *exinfo) { wchar_t dump_file_name[MAX_PATH]; swprintf_s(dump_file_name, MAX_PATH, L"%s\\%s.dmp", - dump_path_.c_str(), next_minidump_id_); + dump_path_.c_str(), next_minidump_id_.c_str()); bool success = false; if (minidump_write_dump_) { @@ -126,10 +124,7 @@ bool ExceptionHandler::WriteMinidumpWithException(EXCEPTION_POINTERS *exinfo) { } if (callback_) { - // This looks nasty, but RPC_WSTR is really just a wide string, - // and there are no "supported" ways to convert them other than casting. - callback_(reinterpret_cast(next_minidump_id_), - callback_context_, success); + callback_(next_minidump_id_, callback_context_, success); } // TODO(bryner): log an error on failure @@ -137,12 +132,9 @@ bool ExceptionHandler::WriteMinidumpWithException(EXCEPTION_POINTERS *exinfo) { } void ExceptionHandler::UpdateNextID() { - if (next_minidump_id_) { - RpcStringFree(&next_minidump_id_); - } GUID id; CoCreateGuid(&id); - UuidToString(&id, &next_minidump_id_); + next_minidump_id_ = GUIDString::GUIDToWString(&id); } } // namespace google_airbag diff --git a/src/client/windows/handler/exception_handler.h b/src/client/windows/handler/exception_handler.h index 534a1d7f..5f6f5231 100644 --- a/src/client/windows/handler/exception_handler.h +++ b/src/client/windows/handler/exception_handler.h @@ -54,13 +54,13 @@ // This will put the exception filter stack into an inconsistent state. // // To use this library in your project, you will need to link against -// rpcrt4.lib and ole32.lib. +// ole32.lib. #ifndef CLIENT_WINDOWS_HANDLER_EXCEPTION_HANDLER_H__ #define CLIENT_WINDOWS_HANDLER_EXCEPTION_HANDLER_H__ -#include -#include +#include +#include #include @@ -121,7 +121,7 @@ class ExceptionHandler { void *callback_context_; wstring dump_path_; - RPC_WSTR next_minidump_id_; + wstring next_minidump_id_; HMODULE dbghelp_module_; MiniDumpWriteDump_type minidump_write_dump_; diff --git a/src/client/windows/handler/exception_handler.vcproj b/src/client/windows/handler/exception_handler.vcproj index 1f9bdb17..70efe119 100644 --- a/src/client/windows/handler/exception_handler.vcproj +++ b/src/client/windows/handler/exception_handler.vcproj @@ -41,7 +41,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_LIB" + PreprocessorDefinitions="WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -104,7 +104,7 @@ + + + + #include +#include namespace google_airbag { diff --git a/src/client/windows/sender/crash_report_sender.vcproj b/src/client/windows/sender/crash_report_sender.vcproj index fc131ef5..76a579b4 100644 --- a/src/client/windows/sender/crash_report_sender.vcproj +++ b/src/client/windows/sender/crash_report_sender.vcproj @@ -41,7 +41,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_LIB" + PreprocessorDefinitions="WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -104,7 +104,7 @@ + +#include "common/windows/guid_string.h" + +namespace google_airbag { + +// static +wstring GUIDString::GUIDToWString(GUID *guid) { + wchar_t guid_string[37]; + _snwprintf_s(guid_string, sizeof(guid_string) / sizeof(wchar_t), _TRUNCATE, + L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], + guid->Data4[3], guid->Data4[4], guid->Data4[5], + guid->Data4[6], guid->Data4[7]); + return wstring(guid_string); +} + +} // namespace google_airbag diff --git a/src/common/windows/guid_string.h b/src/common/windows/guid_string.h new file mode 100644 index 00000000..df067499 --- /dev/null +++ b/src/common/windows/guid_string.h @@ -0,0 +1,52 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// guid_string.cc: Convert GUIDs to strings. + +#ifndef COMMON_WINDOWS_GUID_STRING_H__ +#define COMMON_WINDOWS_GUID_STRING_H__ + +#include + +#include + +namespace google_airbag { + +using std::wstring; + +class GUIDString { + public: + // Converts guid to a string in the format recommended by RFC 4122 and + // returns the string. + static wstring GUIDToWString(GUID *guid); +}; + +} // namespace google_airbag + +#endif // COMMON_WINDOWS_GUID_STRING_H__ diff --git a/src/common/windows/http_upload.cc b/src/common/windows/http_upload.cc index 587ac36f..75f8bec5 100644 --- a/src/common/windows/http_upload.cc +++ b/src/common/windows/http_upload.cc @@ -28,8 +28,8 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -#include -#include +#include +#include #include diff --git a/src/common/windows/http_upload.h b/src/common/windows/http_upload.h index d09db11d..612e552f 100644 --- a/src/common/windows/http_upload.h +++ b/src/common/windows/http_upload.h @@ -34,9 +34,10 @@ #ifndef COMMON_WINDOWS_HTTP_UPLOAD_H__ #define COMMON_WINDOWS_HTTP_UPLOAD_H__ -#include #include +#include #include + namespace google_airbag { using std::string; diff --git a/src/common/windows/pdb_source_line_writer.cc b/src/common/windows/pdb_source_line_writer.cc index 91c95922..5f69775a 100644 --- a/src/common/windows/pdb_source_line_writer.cc +++ b/src/common/windows/pdb_source_line_writer.cc @@ -27,11 +27,13 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include #include -#include #include +#include +#include + #include "common/windows/pdb_source_line_writer.h" +#include "common/windows/guid_string.h" // This constant may be missing from DbgHelp.h. See the documentation for // IDiaSymbol::get_undecoratedNameEx. @@ -631,14 +633,7 @@ wstring PDBSourceLineWriter::GetModuleGUID() { return L""; } - wchar_t guid_buf[37]; - _snwprintf_s(guid_buf, sizeof(guid_buf)/sizeof(wchar_t), _TRUNCATE, - L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", - guid.Data1, guid.Data2, guid.Data3, - guid.Data4[0], guid.Data4[1], guid.Data4[2], - guid.Data4[3], guid.Data4[4], guid.Data4[5], - guid.Data4[6], guid.Data4[7]); - return guid_buf; + return GUIDString::GUIDToWString(&guid); } } // namespace google_airbag diff --git a/src/common/windows/pdb_source_line_writer.h b/src/common/windows/pdb_source_line_writer.h index 4c2c0860..506a4cb7 100644 --- a/src/common/windows/pdb_source_line_writer.h +++ b/src/common/windows/pdb_source_line_writer.h @@ -34,6 +34,7 @@ #define _PDB_SOURCE_LINE_WRITER_H__ #include + #include struct IDiaEnumLineNumbers; diff --git a/src/tools/windows/dump_syms/dump_syms.cc b/src/tools/windows/dump_syms/dump_syms.cc index ca63c2c4..01bc6931 100644 --- a/src/tools/windows/dump_syms/dump_syms.cc +++ b/src/tools/windows/dump_syms/dump_syms.cc @@ -31,7 +31,9 @@ // a text-based format that we can use from the minidump processor. #include + #include + #include "common/windows/pdb_source_line_writer.h" using std::wstring; diff --git a/src/tools/windows/dump_syms/dump_syms.vcproj b/src/tools/windows/dump_syms/dump_syms.vcproj index 19682d6e..c0a3390f 100644 --- a/src/tools/windows/dump_syms/dump_syms.vcproj +++ b/src/tools/windows/dump_syms/dump_syms.vcproj @@ -40,7 +40,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""$(VSInstallDir)\DIA SDK\include";..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -115,7 +115,7 @@ + + @@ -195,6 +199,10 @@ RelativePath=".\dump_syms.cc" > + + diff --git a/src/tools/windows/symupload/symupload.cc b/src/tools/windows/symupload/symupload.cc index e5c74664..b528c322 100644 --- a/src/tools/windows/symupload/symupload.cc +++ b/src/tools/windows/symupload/symupload.cc @@ -37,17 +37,17 @@ // e.g. 11111111-2222-3333-4444-555555555555 // symbol_file: the airbag-format symbol file -#include -#include -#include +#include +#include +#include #include -#include -#include #include +#include +#include -#include "common/windows/pdb_source_line_writer.h" #include "common/windows/http_upload.h" +#include "common/windows/pdb_source_line_writer.h" using std::string; using std::wstring; diff --git a/src/tools/windows/symupload/symupload.vcproj b/src/tools/windows/symupload/symupload.vcproj index 63b731c1..ddd63fc1 100755 --- a/src/tools/windows/symupload/symupload.vcproj +++ b/src/tools/windows/symupload/symupload.vcproj @@ -40,7 +40,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""$(VSInstallDir)\DIA SDK\include";..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -116,7 +116,7 @@ + + @@ -196,6 +200,10 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + +