Bladeren bron

Fix os::execute_process

Daniele Bartolini 12 jaren geleden
bovenliggende
commit
a97bf20940
2 gewijzigde bestanden met toevoegingen van 12 en 7 verwijderingen
  1. 7 1
      engine/os/OS.h
  2. 5 6
      engine/os/linux/LinuxOS.cpp

+ 7 - 1
engine/os/OS.h

@@ -139,7 +139,13 @@ void*			lookup_symbol(void* library, const char* name);
 //-----------------------------------------------------------------------------
 // Process execution
 //-----------------------------------------------------------------------------
-void			execute_process(const char* program, const char* params);
+
+/// Executes a process.
+/// @a args is an array of arguments where:
+/// @a args[0] is the path to the program executable,
+/// @a args[1, 2, ..., n-1] is a list of arguments to pass to the executable,
+/// @a args[n] is NULL.
+void			execute_process(const char* args[]);
 
 } // namespace os
 

+ 5 - 6
engine/os/linux/LinuxOS.cpp

@@ -310,21 +310,20 @@ void* lookup_symbol(void* library, const char* name)
 }
 
 //-----------------------------------------------------------------------------
-void execute_process(const char* program, const char* params)
+void execute_process(const char* args[])
 {
-	int32_t ret;
-
 	pid_t pid = fork();
 	CE_ASSERT(pid != -1, "Unable to fork");
 
 	if (pid)
 	{
-		wait(&ret);
+		int32_t dummy;
+		wait(&dummy);
 	}
 	else
 	{
-		int32_t res = execlp(program, program, params, NULL);
-		CE_ASSERT(res != -1, "Unable to exec %s with error %d", program, res);
+		int res = execv(args[0], (char* const*)args);
+		CE_ASSERT(res != -1, "Unable to exec '%s'. errno %d", args[0], res);
 		exit(EXIT_SUCCESS);
 	}
 }