Fix usage of snprintf for MSVC

Older versions of MSVC don't have a snprintf functions. Some files
were already working around that, but not all of them. Instead of
copying the logic into every file, I centralize it into a new
stdio.h wrapper file and make other files include that.

BUG=
R=mark@chromium.org

Review URL: https://codereview.chromium.org/1602563003 .

Patch from Pavel Labath <labath@google.com>.
This commit is contained in:
Pavel Labath 2016-01-19 21:28:44 -05:00 committed by Mark Mentovai
parent 126a938fef
commit 48673cdb8c
7 changed files with 50 additions and 17 deletions

43
src/common/stdio.h Normal file
View file

@ -0,0 +1,43 @@
// Copyright (c) 2016, 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.
#ifndef GOOGLE_BREAKPAD_COMMON_STDIO_H
#define GOOGLE_BREAKPAD_COMMON_STDIO_H
#include <stdio.h>
#if defined(_MSC_VER) && MSC_VER < 1900
#include <basetsd.h>
#define snprintf _snprintf
typedef SSIZE_T ssize_t;
#endif
#endif // GOOGLE_BREAKPAD_COMMON_STDIO_H

View file

@ -34,17 +34,14 @@
#include "google_breakpad/processor/dump_context.h" #include "google_breakpad/processor/dump_context.h"
#include <assert.h> #include <assert.h>
#include <stdio.h>
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <io.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
#else // _WIN32 #else // _WIN32
#include <unistd.h> #include <unistd.h>
#endif // _WIN32 #endif // _WIN32
#include "common/stdio.h"
#include "processor/logging.h" #include "processor/logging.h"
namespace google_breakpad { namespace google_breakpad {

View file

@ -35,20 +35,16 @@
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <stdio.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <string> #include <string>
#include "common/stdio.h"
#include "common/using_std_string.h" #include "common/using_std_string.h"
#include "processor/logging.h" #include "processor/logging.h"
#include "processor/pathname_stripper.h" #include "processor/pathname_stripper.h"
#ifdef _WIN32
#define snprintf _snprintf
#endif
namespace google_breakpad { namespace google_breakpad {
LogStream::LogStream(std::ostream &stream, Severity severity, LogStream::LogStream(std::ostream &stream, Severity severity,

View file

@ -38,15 +38,11 @@
#include <assert.h> #include <assert.h>
#include <fcntl.h> #include <fcntl.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <io.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
#else // _WIN32 #else // _WIN32
#include <unistd.h> #include <unistd.h>
#endif // _WIN32 #endif // _WIN32
@ -60,6 +56,7 @@
#include "processor/range_map-inl.h" #include "processor/range_map-inl.h"
#include "common/scoped_ptr.h" #include "common/scoped_ptr.h"
#include "common/stdio.h"
#include "google_breakpad/processor/dump_context.h" #include "google_breakpad/processor/dump_context.h"
#include "processor/basic_code_module.h" #include "processor/basic_code_module.h"
#include "processor/basic_code_modules.h" #include "processor/basic_code_modules.h"

View file

@ -30,11 +30,11 @@
#include "google_breakpad/processor/minidump_processor.h" #include "google_breakpad/processor/minidump_processor.h"
#include <assert.h> #include <assert.h>
#include <stdio.h>
#include <string> #include <string>
#include "common/scoped_ptr.h" #include "common/scoped_ptr.h"
#include "common/stdio.h"
#include "common/using_std_string.h" #include "common/using_std_string.h"
#include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/call_stack.h"
#include "google_breakpad/processor/minidump.h" #include "google_breakpad/processor/minidump.h"

View file

@ -35,13 +35,13 @@
#include "processor/stackwalk_common.h" #include "processor/stackwalk_common.h"
#include <assert.h> #include <assert.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <string> #include <string>
#include <vector> #include <vector>
#include "common/stdio.h"
#include "common/using_std_string.h" #include "common/using_std_string.h"
#include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/call_stack.h"
#include "google_breakpad/processor/code_module.h" #include "google_breakpad/processor/code_module.h"

View file

@ -33,9 +33,9 @@
// //
// Author: Ben Wagner // Author: Ben Wagner
#include <cstdio>
#include <string> #include <string>
#include "common/stdio.h"
#include "google_breakpad/common/breakpad_types.h" #include "google_breakpad/common/breakpad_types.h"
#include "google_breakpad/common/minidump_exception_win32.h" #include "google_breakpad/common/minidump_exception_win32.h"
#include "processor/symbolic_constants_win.h" #include "processor/symbolic_constants_win.h"
@ -6406,7 +6406,7 @@ std::string NTStatusToString(uint32_t ntstatus) {
break; break;
default: { default: {
char reason_string[11]; char reason_string[11];
std::snprintf(reason_string, sizeof(reason_string), "0x%08x", ntstatus); snprintf(reason_string, sizeof(reason_string), "0x%08x", ntstatus);
reason = reason_string; reason = reason_string;
break; break;
} }