blob: 0fddd8c8c337041bdbaf9e037d99cc127aa5a3a1 [file] [log] [blame]
From 2876d1ff19deea7369f19760e4b90da99e877d53 Mon Sep 17 00:00:00 2001
From: Jon Turney <jon.turney@dronecode.org.uk>
Date: Thu, 8 Oct 2015 02:11:41 +0100
Subject: [PATCH 08/29] Fix building client library and upload tools for MinGW
This is the rest of https://breakpad.appspot.com/548002/, brought up to date
v2:
Refine MinGW changes in HTTPUpload::GetFileContents so it closes file after use
v3:
For consistency, write conditionals in terms of _MSC_VER, not __MINGW32__
v4:
Use fd rather than FILE * in HTTPUpload::GetFileContents
It appears that constructing a stdio_filebuf from a FILE * does a fflush(0),
which has been seen to occasionally fail EBADF (on at least W7 x64).
Both of these things seem like they might be bugs
Workaround for the moment by constructing stdio_filebuf from a fd instead.
v5:
Drop HTTPUpload::GetFileContents() changes as upstream now uses WideTOMBCP()
Drop changes to avoid stdext::checked_array_iterator, as upstream
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
---
Makefile.am | 2 --
src/client/windows/crash_generation/client_info.cc | 4 ++++
.../windows/tests/crash_generation_app/crash_generation_app.cc | 6 ++++++
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 61545454..7801d243 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -354,13 +354,11 @@ bin_PROGRAMS += \
src/processor/minidump_stackwalk
endif !DISABLE_PROCESSOR
-if !MINGW_HOST
if !DISABLE_TOOLS
bin_PROGRAMS += \
src/tools/linux/symupload/minidump_upload \
src/tools/linux/symupload/sym_upload
endif
-endif
if LINUX_HOST
EXTRA_PROGRAMS += \
diff --git a/src/client/windows/crash_generation/client_info.cc b/src/client/windows/crash_generation/client_info.cc
index ed312638..30a48db0 100644
--- a/src/client/windows/crash_generation/client_info.cc
+++ b/src/client/windows/crash_generation/client_info.cc
@@ -176,7 +176,11 @@ void ClientInfo::SetProcessUptime() {
// Convert it to a string.
wchar_t* value = custom_info_entries_.get()[custom_client_info_.count].value;
+#ifdef _MSC_VER
_i64tow_s(delay, value, CustomInfoEntry::kValueMaxLength, 10);
+#else
+ _i64tow(delay, value, 10);
+#endif
}
bool ClientInfo::PopulateCustomInfo() {
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
index 0d837e52..52736768 100644
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
@@ -42,6 +42,10 @@
#include "client/windows/tests/crash_generation_app/abstract_class.h"
+#ifndef _MSC_VER
+#define swprintf_s swprintf
+#endif
+
namespace google_breakpad {
const int kMaxLoadString = 100;
@@ -480,9 +484,11 @@ int APIENTRY _tWinMain(HINSTANCE instance,
CustomClientInfo custom_info = {kCustomInfoEntries, kCustomInfoCount};
CrashServerStart();
+#ifdef _MSC_VER
// This is needed for CRT to not show dialog for invalid param
// failures and instead let the code handle it.
_CrtSetReportMode(_CRT_ASSERT, 0);
+#endif
handler = new ExceptionHandler(L"C:\\dumps\\",
NULL,
google_breakpad::ShowDumpResults,
--
2.15.0