]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Make win32getshell() return std::string
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 16 Apr 2020 19:25:19 +0000 (21:25 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 16 Apr 2020 20:33:39 +0000 (22:33 +0200)
src/execute.cpp
src/execute.hpp
src/hashutil.cpp
src/system.hpp

index bbd3a6e0981b94272a703642fb6ee293043f6670..91077c4ac0d33dbe33f540738b4c4c8e59e05d37 100644 (file)
@@ -102,7 +102,7 @@ win32argvtos(const char* prefix, const char* const* argv, int* length)
   return str;
 }
 
-char*
+std::string
 win32getshell(const char* path)
 {
   char* path_env;
@@ -125,7 +125,9 @@ win32getshell(const char* path)
     }
   }
 
-  return sh;
+  std::string result = sh ? sh : "";
+  free(sh);
+  return result;
 }
 
 void
@@ -156,9 +158,9 @@ win32execute(const char* path,
   STARTUPINFO si;
   memset(&si, 0x00, sizeof(si));
 
-  char* sh = win32getshell(path);
-  if (sh) {
-    path = sh;
+  std::string sh = win32getshell(path);
+  if (!sh.empty()) {
+    path = sh.c_str();
   }
 
   si.cb = sizeof(STARTUPINFO);
@@ -184,7 +186,8 @@ win32execute(const char* path,
   }
 
   int length;
-  char* args = win32argvtos(sh, argv, &length);
+  const char* prefix = sh.empty() ? nullptr : sh.c_str();
+  char* args = win32argvtos(prefix, argv, &length);
   const char* ext = strrchr(path, '.');
   char full_path_win_ext[MAX_PATH] = {0};
   add_exe_ext_if_no_to_fullpath(full_path_win_ext, MAX_PATH, ext, path);
index 803128f0e9db4401c738c1efcb178c6c438661f8..b06cd2522a9eb757b822bf68f67593bc603f3200 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "system.hpp"
 
+#include <string>
+
 struct Context;
 
 int execute(const char* const* argv, int fd_out, int fd_err, pid_t* pid);
@@ -31,3 +33,17 @@ char* find_executable_in_path(const char* name,
 
 void print_command(FILE* fp, const char* const* argv);
 char* format_command(const char* const* argv);
+
+#ifdef _WIN32
+char* win32argvtos(const char* prefix, const char* const* argv, int* length);
+std::string win32getshell(const char* path);
+int win32execute(const char* path,
+                 const char* const* argv,
+                 int doreturn,
+                 int fd_stdout,
+                 int fd_stderr);
+void add_exe_ext_if_no_to_fullpath(char* full_path_win_ext,
+                                   size_t max_size,
+                                   const char* ext,
+                                   const char* path);
+#endif
index ee0db22bbdd44855d89ed62caa4188c870cb225e..86560ddc4b51633c635becd8664d98c1742286b4 100644 (file)
@@ -330,13 +330,15 @@ hash_command_output(struct hash* hash,
   STARTUPINFO si;
   memset(&si, 0x00, sizeof(si));
 
-  char* path =
+  char* exe_path =
     find_executable_in_path(args[0].c_str(), nullptr, getenv("PATH"));
-  if (!path) {
-    path = x_strdup(args[0].c_str());
+  std::string path = exe_path ? exe_path : "";
+  free(exe_path);
+  if (path.empty()) {
+    path = args[0];
   }
-  char* sh = win32getshell(path);
-  if (sh) {
+  std::string sh = win32getshell(path.c_str());
+  if (!sh.empty()) {
     path = sh;
   }
 
@@ -354,13 +356,13 @@ hash_command_output(struct hash* hash,
   char* win32args;
   if (!cmd) {
     int length;
-    win32args = win32argvtos(sh, argv.data(), &length);
+    const char* prefix = sh.empty() ? nullptr : sh.c_str();
+    win32args = win32argvtos(prefix, argv.data(), &length);
   } else {
     win32args = (char*)command; // quoted
   }
-  BOOL ret =
-    CreateProcess(path, win32args, NULL, NULL, 1, 0, NULL, NULL, &si, &pi);
-  free(path);
+  BOOL ret = CreateProcess(
+    path.c_str(), win32args, NULL, NULL, 1, 0, NULL, NULL, &si, &pi);
   CloseHandle(pipe_out[1]);
   free(win32args);
   if (!cmd) {
index a4106e26dcb78e7b107c794dc851456cca7ac0b3..0b71cb097b71b9d73825914b199d9016c7de804c 100644 (file)
@@ -111,17 +111,3 @@ extern char** environ;
 #ifndef O_BINARY
 #  define O_BINARY 0
 #endif
-
-#ifdef _WIN32
-char* win32argvtos(const char* prefix, const char* const* argv, int* length);
-char* win32getshell(const char* path);
-int win32execute(const char* path,
-                 const char* const* argv,
-                 int doreturn,
-                 int fd_stdout,
-                 int fd_stderr);
-void add_exe_ext_if_no_to_fullpath(char* full_path_win_ext,
-                                   size_t max_size,
-                                   const char* ext,
-                                   const char* path);
-#endif