diff options
Diffstat (limited to 'lib/kernel')
-rw-r--r-- | lib/kernel/test/os_SUITE.erl | 18 | ||||
-rw-r--r-- | lib/kernel/test/seq_trace_SUITE_data/echo_drv.c | 21 |
2 files changed, 33 insertions, 6 deletions
diff --git a/lib/kernel/test/os_SUITE.erl b/lib/kernel/test/os_SUITE.erl index b08b12c978..ae3410d13f 100644 --- a/lib/kernel/test/os_SUITE.erl +++ b/lib/kernel/test/os_SUITE.erl @@ -117,9 +117,21 @@ space_in_name(Config) when is_list(Config) -> ?line ok = file:change_mode(Echo, 8#777), % Make it executable on Unix. %% Run the echo program. - - ?line comp("", os:cmd("\"" ++ Echo ++ "\"")), - ?line comp("a::b::c", os:cmd("\"" ++ Echo ++ "\" a b c")), + %% Quoting on windows depends on if the full path of the executable + %% contains special characters. Paths when running common_tests always + %% include @, why Windows would always fail if we do not double the + %% quotes (this is the behaviour of cmd.exe, not Erlang's idea). + Quote = case os:type() of + {win32,_} -> + case (Echo -- "&<>()@^|") =:= Echo of + true -> "\""; + false -> "\"\"" + end; + _ -> + "\"" + end, + ?line comp("", os:cmd(Quote ++ Echo ++ Quote)), + ?line comp("a::b::c", os:cmd(Quote ++ Echo ++ Quote ++ " a b c")), ?t:sleep(5), ?line [] = receive_all(), ok. diff --git a/lib/kernel/test/seq_trace_SUITE_data/echo_drv.c b/lib/kernel/test/seq_trace_SUITE_data/echo_drv.c index dcbb3348d8..aa182b0877 100644 --- a/lib/kernel/test/seq_trace_SUITE_data/echo_drv.c +++ b/lib/kernel/test/seq_trace_SUITE_data/echo_drv.c @@ -3,7 +3,7 @@ static ErlDrvPort erlang_port; static ErlDrvData echo_start(ErlDrvPort, char *); -static void echo_stop(ErlDrvData), echo_read(ErlDrvData, char*, int); +static void echo_stop(ErlDrvData), echo_read(ErlDrvData, char*, ErlDrvSizeT); static ErlDrvEntry echo_driver_entry = { NULL, @@ -13,7 +13,22 @@ static ErlDrvEntry echo_driver_entry = { NULL, NULL, "echo_drv", - NULL + NULL, + NULL, /* handle */ + NULL, /* control */ + NULL, /* timeout */ + NULL, /* outputv */ + NULL, /* ready_async */ + NULL, + NULL, + NULL, + ERL_DRV_EXTENDED_MARKER, + ERL_DRV_EXTENDED_MAJOR_VERSION, + ERL_DRV_EXTENDED_MINOR_VERSION, + 0, + NULL, + NULL, + NULL, }; DRIVER_INIT(echo_drv) @@ -31,7 +46,7 @@ static ErlDrvData echo_start(ErlDrvPort port,char *buf) return (ErlDrvData)port; } -static void echo_read(ErlDrvData data, char *buf, int count) +static void echo_read(ErlDrvData data, char *buf, ErlDrvSizeT count) { driver_output(erlang_port, buf, count); } |