Browse Source

Merge pull request #45155 from bruvzg/fix_execute_arguments

Fix OS::execute() and OS::create_process() command line argument.
Rémi Verschelde 4 years ago
parent
commit
d754cf95a2
1 changed files with 16 additions and 6 deletions
  1. 16 6
      drivers/unix/os_unix.cpp

+ 16 - 6
drivers/unix/os_unix.cpp

@@ -299,10 +299,15 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, St
 
 
 	if (pid == 0) {
 	if (pid == 0) {
 		// The child process
 		// The child process
-		Vector<char *> args;
-		args.push_back((char *)p_path.utf8().get_data());
+		Vector<CharString> cs;
+		cs.push_back(p_path.utf8());
 		for (int i = 0; i < p_arguments.size(); i++) {
 		for (int i = 0; i < p_arguments.size(); i++) {
-			args.push_back((char *)p_arguments[i].utf8().get_data());
+			cs.push_back(p_arguments[i].utf8());
+		}
+
+		Vector<char *> args;
+		for (int i = 0; i < cs.size(); i++) {
+			args.push_back((char *)cs[i].get_data());
 		}
 		}
 		args.push_back(0);
 		args.push_back(0);
 
 
@@ -335,10 +340,15 @@ Error OS_Unix::create_process(const String &p_path, const List<String> &p_argume
 		// This ensures the process won't go zombie at the end.
 		// This ensures the process won't go zombie at the end.
 		setsid();
 		setsid();
 
 
-		Vector<char *> args;
-		args.push_back((char *)p_path.utf8().get_data());
+		Vector<CharString> cs;
+		cs.push_back(p_path.utf8());
 		for (int i = 0; i < p_arguments.size(); i++) {
 		for (int i = 0; i < p_arguments.size(); i++) {
-			args.push_back((char *)p_arguments[i].utf8().get_data());
+			cs.push_back(p_arguments[i].utf8());
+		}
+
+		Vector<char *> args;
+		for (int i = 0; i < cs.size(); i++) {
+			args.push_back((char *)cs[i].get_data());
 		}
 		}
 		args.push_back(0);
 		args.push_back(0);