Răsfoiți Sursa

[cmd] use `Unix.system` instead of `Unix.open_process` (fixes #6726, fixes #4669)

Aleksandr Kuzmenko 4 ani în urmă
părinte
comite
03a51fa859
1 a modificat fișierele cu 8 adăugiri și 20 ștergeri
  1. 8 20
      src/compiler/haxe.ml

+ 8 - 20
src/compiler/haxe.ml

@@ -158,27 +158,15 @@ let run_command ctx cmd =
 	let t = Timer.timer ["command"] in
 	let cmd = expand_env ~h:(Some h) cmd in
 	let len = String.length cmd in
-	if len > 3 && String.sub cmd 0 3 = "cd " then begin
-		Sys.chdir (String.sub cmd 3 (len - 3));
-		0
-	end else
-	let binary_string s =
-		if not Globals.is_windows then s else String.concat "\n" (Str.split (Str.regexp "\r\n") s)
-	in
-	let pout, pin, perr = Unix.open_process_full cmd (Unix.environment()) in
-	let bout = Buffer.create 0 in
-	let berr = Buffer.create 0 in
-	let read_content channel buf =
-		Buffer.add_string buf (IO.read_all (IO.input_channel channel));
+	let result =
+		if len > 3 && String.sub cmd 0 3 = "cd " then begin
+			Sys.chdir (String.sub cmd 3 (len - 3));
+			0
+		end else begin
+			match Unix.system cmd with
+			| WEXITED c | WSIGNALED c | WSTOPPED c -> c
+		end
 	in
-	let tout = Thread.create (fun() -> read_content pout bout) () in
-	read_content perr berr;
-	Thread.join tout;
-	let result = (match Unix.close_process_full (pout,pin,perr) with Unix.WEXITED c | Unix.WSIGNALED c | Unix.WSTOPPED c -> c) in
-	let serr = binary_string (Buffer.contents berr) in
-	let sout = binary_string (Buffer.contents bout) in
-	if serr <> "" then ctx.messages <- CMError((if serr.[String.length serr - 1] = '\n' then String.sub serr 0 (String.length serr - 1) else serr),null_pos) :: ctx.messages;
-	if sout <> "" then ctx.com.print (sout ^ "\n");
 	t();
 	result