commit
eaeca0d42b
@ -108,7 +108,7 @@ namespace compiler {
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
#if defined(_MSC_VER)
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::access;
|
||||
|
@ -69,7 +69,7 @@ namespace google {
|
||||
namespace protobuf {
|
||||
namespace compiler {
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::access;
|
||||
|
@ -59,6 +59,9 @@
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <ctype.h>
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::access;
|
||||
|
@ -50,7 +50,7 @@
|
||||
#include <google/protobuf/stubs/io_win32.h>
|
||||
#include <google/protobuf/stubs/strutil.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::open;
|
||||
|
@ -49,7 +49,7 @@
|
||||
#include <google/protobuf/descriptor.h>
|
||||
#include <google/protobuf/io/zero_copy_stream_impl.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::setmode;
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <google/protobuf/compiler/subprocess.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
|
||||
#ifndef _WIN32
|
||||
@ -51,6 +52,16 @@ namespace google {
|
||||
namespace protobuf {
|
||||
namespace compiler {
|
||||
|
||||
namespace {
|
||||
char* portable_strdup(const char* s) {
|
||||
char* ns = (char*) malloc(strlen(s) + 1);
|
||||
if (ns != NULL) {
|
||||
strcpy(ns, s);
|
||||
}
|
||||
return ns;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
static void CloseHandleOrDie(HANDLE handle) {
|
||||
@ -114,7 +125,7 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
|
||||
}
|
||||
|
||||
// CreateProcess() mutates its second parameter. WTF?
|
||||
char* name_copy = strdup(program.c_str());
|
||||
char* name_copy = portable_strdup(program.c_str());
|
||||
|
||||
// Create the process.
|
||||
PROCESS_INFORMATION process_info;
|
||||
@ -298,7 +309,7 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
|
||||
GOOGLE_CHECK(pipe(stdin_pipe) != -1);
|
||||
GOOGLE_CHECK(pipe(stdout_pipe) != -1);
|
||||
|
||||
char* argv[2] = { strdup(program.c_str()), NULL };
|
||||
char* argv[2] = { portable_strdup(program.c_str()), NULL };
|
||||
|
||||
child_pid_ = fork();
|
||||
if (child_pid_ == -1) {
|
||||
|
@ -56,6 +56,9 @@ namespace io {
|
||||
// Win32 lseek is broken: If invoked on a non-seekable file descriptor, its
|
||||
// return value is undefined. We re-define it to always produce an error.
|
||||
#define lseek(fd, offset, origin) ((off_t)-1)
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::access;
|
||||
|
@ -83,6 +83,9 @@ namespace {
|
||||
|
||||
#ifdef _WIN32
|
||||
#define pipe(fds) _pipe(fds, 4096, O_BINARY)
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::access;
|
||||
|
@ -63,7 +63,7 @@
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::close;
|
||||
|
@ -39,7 +39,7 @@
|
||||
//
|
||||
// This file is only used on Windows, it's empty on other platforms.
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_MSC_VER)
|
||||
|
||||
// Comment this out to fall back to using the ANSI versions (open, mkdir, ...)
|
||||
// instead of the Unicode ones (_wopen, _wmkdir, ...). Doing so can be useful to
|
||||
@ -105,17 +105,17 @@ bool has_longpath_prefix(const char_type* path) {
|
||||
path[3] == '\\';
|
||||
}
|
||||
|
||||
template <typename char_type>
|
||||
bool is_separator(char_type c) {
|
||||
return c == '/' || c == '\\';
|
||||
}
|
||||
|
||||
// Returns true if the path starts with a drive specifier (e.g. "c:\").
|
||||
template <typename char_type>
|
||||
bool is_path_absolute(const char_type* path) {
|
||||
return has_drive_letter(path) && is_separator(path[2]);
|
||||
}
|
||||
|
||||
template <typename char_type>
|
||||
bool is_separator(char_type c) {
|
||||
return c == '/' || c == '\\';
|
||||
}
|
||||
|
||||
template <typename char_type>
|
||||
bool is_drive_relative(const char_type* path) {
|
||||
return has_drive_letter(path) && (path[2] == 0 || !is_separator(path[2]));
|
||||
@ -358,5 +358,5 @@ wstring testonly_path_to_winpath(const string& path) {
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
|
||||
#endif // defined(_WIN32)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
|
@ -50,6 +50,9 @@
|
||||
#include <string>
|
||||
#include <google/protobuf/stubs/port.h>
|
||||
|
||||
// Compilers on Windows other than MSVC (e.g. Cygwin, MinGW32) define the
|
||||
// following functions already, except for mkdir.
|
||||
#ifdef _MSC_VER
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
namespace internal {
|
||||
@ -74,6 +77,9 @@ LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath(
|
||||
} // namespace internal
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
#else // _MSC_VER
|
||||
#define mkdir(name, mode) mkdir(name)
|
||||
#endif // !_MSC_VER
|
||||
|
||||
#ifndef W_OK
|
||||
#define W_OK 02 // not defined by MSVC for whatever reason
|
||||
|
@ -55,6 +55,9 @@ namespace protobuf {
|
||||
#define lstat stat
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
using google::protobuf::internal::win32::access;
|
||||
using google::protobuf::internal::win32::chdir;
|
||||
using google::protobuf::internal::win32::fopen;
|
||||
|
@ -52,7 +52,7 @@
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _MSC_VER
|
||||
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
|
||||
// them like we do below.
|
||||
using google::protobuf::internal::win32::close;
|
||||
|
Loading…
Reference in New Issue
Block a user