Commits

Anonymous committed 55af8de

Fix issues with Windows build: Always use ASCII version of CreateProcess (even if UNICODE is defined) and move GetMessage macro work-around to common.h so that it covers extension_set.h as well. Patch from Nick Carter.

  • Participants
  • Parent commits 108f206

Comments (0)

Files changed (3)

src/google/protobuf/compiler/subprocess.cc

   }
 
   // Setup STARTUPINFO to redirect handles.
-  STARTUPINFO startup_info;
+  STARTUPINFOA startup_info;
   ZeroMemory(&startup_info, sizeof(startup_info));
   startup_info.cb = sizeof(startup_info);
   startup_info.dwFlags = STARTF_USESTDHANDLES;
   // Create the process.
   PROCESS_INFORMATION process_info;
 
-  if (CreateProcess((search_mode == SEARCH_PATH) ? NULL : program.c_str(),
-                    (search_mode == SEARCH_PATH) ? name_copy : NULL,
-                    NULL,  // process security attributes
-                    NULL,  // thread security attributes
-                    TRUE,  // inherit handles?
-                    0,     // obscure creation flags
-                    NULL,  // environment (inherit from parent)
-                    NULL,  // current directory (inherit from parent)
-                    &startup_info,
-                    &process_info)) {
+  if (CreateProcessA((search_mode == SEARCH_PATH) ? NULL : program.c_str(),
+                     (search_mode == SEARCH_PATH) ? name_copy : NULL,
+                     NULL,  // process security attributes
+                     NULL,  // thread security attributes
+                     TRUE,  // inherit handles?
+                     0,     // obscure creation flags
+                     NULL,  // environment (inherit from parent)
+                     NULL,  // current directory (inherit from parent)
+                     &startup_info,
+                     &process_info)) {
     child_handle_ = process_info.hProcess;
     CloseHandleOrDie(process_info.hThread);
     child_stdin_ = stdin_pipe_write;

src/google/protobuf/message.h

 
 #include <google/protobuf/stubs/common.h>
 
-#if defined(_WIN32) && defined(GetMessage)
-// windows.h defines GetMessage() as a macro.  Let's re-define it as an inline
-// function.  This is necessary because Reflection has a method called
-// GetMessage() which we don't want overridden.  The inline function should be
-// equivalent for C++ users.
-inline BOOL GetMessage_Win32(
-    LPMSG lpMsg, HWND hWnd,
-    UINT wMsgFilterMin, UINT wMsgFilterMax) {
-  return GetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
-}
-#undef GetMessage
-inline BOOL GetMessage(
-    LPMSG lpMsg, HWND hWnd,
-    UINT wMsgFilterMin, UINT wMsgFilterMax) {
-  return GetMessage_Win32(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
-}
-#endif
-
-
 namespace google {
 namespace protobuf {
 

src/google/protobuf/stubs/common.h

 #include <stdint.h>
 #endif
 
+#if defined(_WIN32) && defined(GetMessage)
+// Allow GetMessage to be used as a valid method name in protobuf classes.
+// windows.h defines GetMessage() as a macro.  Let's re-define it as an inline
+// function.  The inline function should be equivalent for C++ users.
+inline BOOL GetMessage_Win32(
+    LPMSG lpMsg, HWND hWnd,
+    UINT wMsgFilterMin, UINT wMsgFilterMax) {
+  return GetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
+}
+#undef GetMessage
+inline BOOL GetMessage(
+    LPMSG lpMsg, HWND hWnd,
+    UINT wMsgFilterMin, UINT wMsgFilterMax) {
+  return GetMessage_Win32(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
+}
+#endif
+
+
 namespace std {}
 
 namespace google {