From a0d47c709562f4bf36fe05c2ebaf812c75eb894a Mon Sep 17 00:00:00 2001
From: Siri Hansen <siri@erlang.org>
Date: Fri, 21 Sep 2012 14:57:51 +0200
Subject: [reltool] Use spawn_executable instead of spawn when starting nodes
 in test

In order to handle paths with space, spawn_executable is now used
instead of spawn when starting nodes with open_port/2 in
reltool_server_SUITE.
---
 lib/reltool/test/reltool_server_SUITE.erl | 41 +++++++++++++++++--------------
 1 file changed, 23 insertions(+), 18 deletions(-)

(limited to 'lib')

diff --git a/lib/reltool/test/reltool_server_SUITE.erl b/lib/reltool/test/reltool_server_SUITE.erl
index 773b11583e..8d71865508 100644
--- a/lib/reltool/test/reltool_server_SUITE.erl
+++ b/lib/reltool/test/reltool_server_SUITE.erl
@@ -1084,9 +1084,14 @@ create_slim(Config) ->
 
     RootDir = code:root_dir(),
     Erl = filename:join([RootDir, "bin", "erl"]),
-    Args = "-boot_var RELTOOL_EXT_LIB " ++ TargetLibDir ++
-	" -boot " ++ filename:join(TargetRelVsnDir,RelName) ++
-	" -sasl releases_dir \\\"" ++ TargetRelDir ++ "\\\"",
+    EscapedQuote =
+	case os:type() of
+	    {win32,_} -> "\\\"";
+	    _         -> "\""
+	end,
+    Args = ["-boot_var", "RELTOOL_EXT_LIB", TargetLibDir,
+	    "-boot", filename:join(TargetRelVsnDir,RelName),
+	    "-sasl", "releases_dir", EscapedQuote++TargetRelDir++EscapedQuote],
     {ok, Node} = ?msym({ok, _}, start_node(?NODE_NAME, Erl, Args)),
     ?msym(RootDir, rpc:call(Node, code, root_dir, [])),
     ?msym([{RelName,RelVsn,_,permanent}],
@@ -2412,11 +2417,13 @@ mod_path(Node,Mod) ->
 
 start_node(Name, ErlPath) ->
     start_node(Name, ErlPath, []).
-start_node(Name, ErlPath, Args) ->
+start_node(Name, ErlPath, Args0) ->
     FullName = full_node_name(Name),
-    CmdLine = mk_node_cmdline(Name, ErlPath, Args),
-    io:format("Starting node ~p: ~s~n", [FullName, CmdLine]),
-    case open_port({spawn, CmdLine}, []) of
+    Args = mk_node_args(Name, Args0),
+    io:format("Starting node ~p: ~s~n",
+	      [FullName, lists:flatten([[X," "] || X <- [ErlPath|Args]])]),
+    %io:format("open_port({spawn_executable, ~p}, [{args,~p}])~n",[ErlPath,Args]),
+    case open_port({spawn_executable, ErlPath}, [{args,Args}]) of
         Port when is_port(Port) ->
             unlink(Port),
             erlang:port_close(Port),
@@ -2433,23 +2440,21 @@ stop_node(Node) ->
     spawn(Node, fun () -> halt() end),
     receive {nodedown, Node} -> ok end.
 
-mk_node_cmdline(Name, Prog, Args) ->
-    Static = "-detached -noinput",
+mk_node_args(Name, Args) ->
     Pa = filename:dirname(code:which(?MODULE)),
     NameSw = case net_kernel:longnames() of
-                 false -> "-sname ";
-                 true -> "-name ";
+                 false -> "-sname";
+                 true -> "-name";
                  _ -> exit(not_distributed_node)
              end,
     {ok, Pwd} = file:get_cwd(),
     NameStr = atom_to_list(Name),
-    Prog ++ " "
-        ++ Static ++ " "
-        ++ NameSw ++ " " ++ NameStr ++ " "
-        ++ "-pa " ++ Pa ++ " "
-        ++ "-env ERL_CRASH_DUMP " ++ Pwd ++ "/erl_crash_dump." ++ NameStr ++ " "
-        ++ "-setcookie " ++ atom_to_list(erlang:get_cookie())
-	++ " " ++ Args.
+    ["-detached", "-noinput",
+     NameSw, NameStr,
+     "-pa", Pa,
+     "-env", "ERL_CRASH_DUMP", Pwd ++ "/erl_crash_dump." ++ NameStr,
+     "-setcookie", atom_to_list(erlang:get_cookie())
+     | Args].
 
 full_node_name(PreName) ->
     HostSuffix = lists:dropwhile(fun ($@) -> false; (_) -> true end,
-- 
cgit v1.2.3