Introduce wrapper for CreateProcess
authorTom Tromey <tromey@adacore.com>
Tue, 7 Sep 2021 20:41:52 +0000 (14:41 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 7 Jun 2022 15:59:40 +0000 (09:59 -0600)
This is a small refactoring that introduces a wrapper for the Windows
CreateProcess function.  This is done to make the next patch a bit
simpler.

gdb/nat/windows-nat.c
gdb/nat/windows-nat.h
gdb/windows-nat.c
gdbserver/win32-low.cc

index ca6a529601eb68f07fe9063cb8f4dff223af2b54..8048344752baa09dad0fe8e7d868a8201c2b2e40 100644 (file)
@@ -741,6 +741,57 @@ wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout)
   return result;
 }
 
+/* Helper template for the CreateProcess wrappers.  */
+template<typename FUNC, typename CHAR, typename INFO>
+BOOL
+create_process_wrapper (FUNC *do_create_process, const CHAR *image,
+                       CHAR *command_line, DWORD flags,
+                       void *environment, const CHAR *cur_dir,
+                       INFO *startup_info,
+                       PROCESS_INFORMATION *process_info)
+{
+  return do_create_process (image,
+                           command_line, /* command line */
+                           nullptr,      /* Security */
+                           nullptr,      /* thread */
+                           TRUE,         /* inherit handles */
+                           flags,        /* start flags */
+                           environment,  /* environment */
+                           cur_dir,      /* current directory */
+                           startup_info,
+                           process_info);
+}
+
+/* See nat/windows-nat.h.  */
+
+BOOL
+create_process (const char *image, char *command_line, DWORD flags,
+               void *environment, const char *cur_dir,
+               STARTUPINFOA *startup_info,
+               PROCESS_INFORMATION *process_info)
+{
+  return create_process_wrapper (CreateProcessA, image, command_line, flags,
+                                environment, cur_dir,
+                                startup_info, process_info);
+}
+
+#ifdef __CYGWIN__
+
+/* See nat/windows-nat.h.  */
+
+BOOL
+create_process (const wchar_t *image, wchar_t *command_line, DWORD flags,
+               void *environment, const wchar_t *cur_dir,
+               STARTUPINFOW *startup_info,
+               PROCESS_INFORMATION *process_info);
+{
+  return create_process_wrapper (CreateProcessW, image, command_line, flags,
+                                environment, cur_dir,
+                                startup_info, process_info);
+}
+
+#endif /* __CYGWIN__ */
+
 /* Define dummy functions which always return error for the rare cases where
    these functions could not be found.  */
 template<typename... T>
index 450ba69c844c48ba3488ba1f329e07d69162aca9..d8c498ef06e5f2b94ed92a3ede6f37bcc3b3eebf 100644 (file)
@@ -294,6 +294,21 @@ extern BOOL continue_last_debug_event (DWORD continue_status,
 
 extern BOOL wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout);
 
+/* Wrappers for CreateProcess.  */
+
+extern BOOL create_process (const char *image, char *command_line,
+                           DWORD flags, void *environment,
+                           const char *cur_dir,
+                           STARTUPINFOA *startup_info,
+                           PROCESS_INFORMATION *process_info);
+#ifdef __CYGWIN__
+extern BOOL create_process (const wchar_t *image, wchar_t *command_line,
+                           DWORD flags, void *environment,
+                           const wchar_t *cur_dir,
+                           STARTUPINFOW *startup_info,
+                           PROCESS_INFORMATION *process_info);
+#endif /* __CYGWIN__ */
+
 #define AdjustTokenPrivileges          dyn_AdjustTokenPrivileges
 #define DebugActiveProcessStop         dyn_DebugActiveProcessStop
 #define DebugBreakProcess              dyn_DebugBreakProcess
index 8631a1b45698e34aea3b1783512dc97116e579c9..262619d9cb7b97e367b40e11fbacbdb12ce12377 100644 (file)
@@ -78,12 +78,10 @@ using namespace windows_nat;
 static windows_process_info windows_process;
 
 #undef STARTUPINFO
-#undef CreateProcess
 
 #ifndef __CYGWIN__
 # define __PMAX        (MAX_PATH + 1)
 # define STARTUPINFO STARTUPINFOA
-# define CreateProcess CreateProcessA
 #else
 # define __PMAX        PATH_MAX
 /* The starting and ending address of the cygwin1.dll text segment.  */
@@ -92,7 +90,6 @@ static windows_process_info windows_process;
 #   define __USEWIDE
     typedef wchar_t cygwin_buf_t;
 #   define STARTUPINFO STARTUPINFOW
-#   define CreateProcess CreateProcessW
 #endif
 
 static int have_saved_context; /* True if we've saved context from a
@@ -2494,17 +2491,9 @@ windows_nat_target::create_inferior (const char *exec_file,
     }
 
   windows_init_thread_list ();
-  ret = CreateProcess (0,
-                      args,    /* command line */
-                      NULL,    /* Security */
-                      NULL,    /* thread */
-                      TRUE,    /* inherit handles */
-                      flags,   /* start flags */
-                      w32_env, /* environment */
-                      inferior_cwd != NULL ? infcwd : NULL, /* current
-                                                               directory */
-                      &si,
-                      &pi);
+  ret = create_process (args, flags, w32_env,
+                       inferior_cwd != nullptr ? infcwd : nullptr,
+                       &si, &pi);
   if (w32_env)
     /* Just free the Win32 environment, if it could be created. */
     free (w32_env);
@@ -2618,11 +2607,8 @@ windows_nat_target::create_inferior (const char *exec_file,
   *temp = 0;
 
   windows_init_thread_list ();
-  ret = CreateProcessA (0,
+  ret = create_process (nullptr, /* image */
                        args,   /* command line */
-                       NULL,   /* Security */
-                       NULL,   /* thread */
-                       TRUE,   /* inherit handles */
                        flags,  /* start flags */
                        w32env, /* environment */
                        inferior_cwd, /* current directory */
index f941e8d29030f139c2a603ca8714ddb04eca8818..00ce2a52feb8f920cafa9b1c3b03c5ba5711ec9a 100644 (file)
@@ -578,11 +578,8 @@ create_process (const char *program, char *args,
   strcpy (program_and_args, program);
   strcat (program_and_args, " ");
   strcat (program_and_args, args);
-  ret = CreateProcessA (program,           /* image name */
+  ret = create_process (program,           /* image name */
                        program_and_args,  /* command line */
-                       NULL,              /* security */
-                       NULL,              /* thread */
-                       TRUE,              /* inherit handles */
                        flags,             /* start flags */
                        NULL,              /* environment */
                        /* current directory */