Unverified Commit 2761122b authored by Jisi Liu's avatar Jisi Liu Committed by GitHub

Merge pull request #3868 from pherl/3.5.x

Support win32 long path for cross compiled build
parents 188f1804 9c197b7e
...@@ -100,7 +100,7 @@ namespace compiler { ...@@ -100,7 +100,7 @@ namespace compiler {
#endif #endif
namespace { namespace {
#if defined(_MSC_VER) #if defined(_WIN32)
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
......
...@@ -70,7 +70,7 @@ namespace google { ...@@ -70,7 +70,7 @@ namespace google {
namespace protobuf { namespace protobuf {
namespace compiler { namespace compiler {
#if defined(_MSC_VER) #if defined(_WIN32)
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
......
...@@ -65,7 +65,7 @@ namespace google { ...@@ -65,7 +65,7 @@ namespace google {
namespace protobuf { namespace protobuf {
namespace compiler { namespace compiler {
#ifdef _MSC_VER #ifdef _WIN32
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
......
...@@ -50,11 +50,6 @@ ...@@ -50,11 +50,6 @@
#include <google/protobuf/stubs/io_win32.h> #include <google/protobuf/stubs/io_win32.h>
#include <google/protobuf/stubs/strutil.h> #include <google/protobuf/stubs/strutil.h>
#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;
#endif
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
// error cases, so it seems to be ok to use as a back door for errors. // error cases, so it seems to be ok to use as a back door for errors.
...@@ -64,6 +59,16 @@ namespace protobuf { ...@@ -64,6 +59,16 @@ namespace protobuf {
namespace compiler { namespace compiler {
namespace objectivec { namespace objectivec {
// <io.h> is transitively included in this file. Import the functions explicitly
// in this port namespace to avoid ambiguous definition.
namespace posix {
#ifdef _WIN32
using ::google::protobuf::internal::win32::open;
#else
using ::open;
#endif
} // namespace port
Options::Options() { Options::Options() {
// Default is the value of the env for the package prefixes. // Default is the value of the env for the package prefixes.
const char* file_path = getenv("GPB_OBJC_EXPECTED_PACKAGE_PREFIXES"); const char* file_path = getenv("GPB_OBJC_EXPECTED_PACKAGE_PREFIXES");
...@@ -1469,7 +1474,7 @@ bool ParseSimpleFile( ...@@ -1469,7 +1474,7 @@ bool ParseSimpleFile(
const string& path, LineConsumer* line_consumer, string* out_error) { const string& path, LineConsumer* line_consumer, string* out_error) {
int fd; int fd;
do { do {
fd = open(path.c_str(), O_RDONLY); fd = posix::open(path.c_str(), O_RDONLY);
} while (fd < 0 && errno == EINTR); } while (fd < 0 && errno == EINTR);
if (fd < 0) { if (fd < 0) {
*out_error = *out_error =
......
...@@ -54,7 +54,7 @@ namespace google { ...@@ -54,7 +54,7 @@ namespace google {
namespace protobuf { namespace protobuf {
namespace compiler { namespace compiler {
#if defined(_MSC_VER) #if defined(_WIN32)
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::setmode; using google::protobuf::internal::win32::setmode;
......
...@@ -56,9 +56,6 @@ namespace io { ...@@ -56,9 +56,6 @@ namespace io {
// Win32 lseek is broken: If invoked on a non-seekable file descriptor, its // 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. // return value is undefined. We re-define it to always produce an error.
#define lseek(fd, offset, origin) ((off_t)-1) #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 // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
......
...@@ -83,9 +83,6 @@ namespace { ...@@ -83,9 +83,6 @@ namespace {
#ifdef _WIN32 #ifdef _WIN32
#define pipe(fds) _pipe(fds, 4096, O_BINARY) #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 // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
namespace google { namespace google {
namespace protobuf { namespace protobuf {
#if defined(_MSC_VER) #if defined(_WIN32)
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::close; using google::protobuf::internal::win32::close;
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
// //
// This file is only used on Windows, it's empty on other platforms. // This file is only used on Windows, it's empty on other platforms.
#if defined(_MSC_VER) #if defined(_WIN32)
// Comment this out to fall back to using the ANSI versions (open, mkdir, ...) // 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 // instead of the Unicode ones (_wopen, _wmkdir, ...). Doing so can be useful to
...@@ -358,5 +358,5 @@ wstring testonly_path_to_winpath(const string& path) { ...@@ -358,5 +358,5 @@ wstring testonly_path_to_winpath(const string& path) {
} // namespace protobuf } // namespace protobuf
} // namespace google } // namespace google
#endif // defined(_MSC_VER) #endif // defined(_WIN32)
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
// Compilers on Windows other than MSVC (e.g. Cygwin, MinGW32) define the // Compilers on Windows other than MSVC (e.g. Cygwin, MinGW32) define the
// following functions already, except for mkdir. // following functions already, except for mkdir.
#ifdef _MSC_VER
namespace google { namespace google {
namespace protobuf { namespace protobuf {
namespace internal { namespace internal {
...@@ -77,9 +76,6 @@ LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath( ...@@ -77,9 +76,6 @@ LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath(
} // namespace internal } // namespace internal
} // namespace protobuf } // namespace protobuf
} // namespace google } // namespace google
#else // _MSC_VER
#define mkdir(name, mode) mkdir(name)
#endif // !_MSC_VER
#ifndef W_OK #ifndef W_OK
#define W_OK 02 // not defined by MSVC for whatever reason #define W_OK 02 // not defined by MSVC for whatever reason
...@@ -100,5 +96,3 @@ LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath( ...@@ -100,5 +96,3 @@ LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath(
#endif // defined(_WIN32) #endif // defined(_WIN32)
#endif // GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__ #endif // GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
// //
// This file is only used on Windows, it's empty on other platforms. // This file is only used on Windows, it's empty on other platforms.
#if defined(_MSC_VER) #if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <errno.h> #include <errno.h>
...@@ -369,5 +369,5 @@ TEST_F(IoWin32Test, AsWindowsPathTest) { ...@@ -369,5 +369,5 @@ TEST_F(IoWin32Test, AsWindowsPathTest) {
} // namespace protobuf } // namespace protobuf
} // namespace google } // namespace google
#endif // defined(_MSC_VER) #endif // defined(_WIN32)
...@@ -57,7 +57,7 @@ namespace protobuf { ...@@ -57,7 +57,7 @@ namespace protobuf {
// them like we do below. // them like we do below.
#endif #endif
#ifdef _MSC_VER #ifdef _WIN32
using google::protobuf::internal::win32::access; using google::protobuf::internal::win32::access;
using google::protobuf::internal::win32::chdir; using google::protobuf::internal::win32::chdir;
using google::protobuf::internal::win32::fopen; using google::protobuf::internal::win32::fopen;
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
namespace google { namespace google {
namespace protobuf { namespace protobuf {
#ifdef _MSC_VER #ifdef _WIN32
// DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import // DO NOT include <io.h>, instead create functions in io_win32.{h,cc} and import
// them like we do below. // them like we do below.
using google::protobuf::internal::win32::close; using google::protobuf::internal::win32::close;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment