Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0214-erlexec-Improve-error-message-when-unable-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0214-erlexec-Improve-error-message-when-unable-to-open-in.patch of Package erlang
From 50e8166131da4de6e469c7565a4f925b9c2374c1 Mon Sep 17 00:00:00 2001 From: Luis Rascao <luis.rascao@miniclip.com> Date: Thu, 29 Oct 2020 09:23:12 +0000 Subject: [PATCH] erlexec: Improve error message when unable to open included args_file By specifying `-args_file` in a supplied `vm.args` it is possible to extend the VM options, the path supplied is relative to the current working directory. Improve the error message when unable to open such a file to ease the process. --- erts/etc/common/erlexec.c | 12 +++++++++++- erts/test/erlexec_SUITE.erl | 32 ++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/erts/etc/common/erlexec.c b/erts/etc/common/erlexec.c index 028c3a6789..6a8f393b76 100644 --- a/erts/etc/common/erlexec.c +++ b/erts/etc/common/erlexec.c @@ -1879,8 +1879,18 @@ read_args_file(char *filename) file = fopen(filename, "r"); } while (!file && errno == EINTR); if (!file) { - usage_format("Failed to open arguments file \"%s\": %s\n", +#ifdef __WIN32__ + char cwd[MAX_PATH]; + if (_getcwd(cwd, sizeof(cwd)) == NULL) { +#else + char cwd[PATH_MAX]; + if (getcwd(cwd, sizeof(cwd)) == NULL) { +#endif + cwd[0] = '\0'; + } + usage_format("Failed to open arguments file \"%s\" at \"%s\": %s\n", filename, + cwd, errno_string()); } diff --git a/erts/test/erlexec_SUITE.erl b/erts/test/erlexec_SUITE.erl index c210c5479b..5794f7e309 100644 --- a/erts/test/erlexec_SUITE.erl +++ b/erts/test/erlexec_SUITE.erl @@ -29,7 +29,7 @@ -export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]). --export([args_file/1, evil_args_file/1, env/1, args_file_env/1, +-export([args_file/1, evil_args_file/1, missing_args_file/1, env/1, args_file_env/1, otp_7461/1, otp_7461_remote/1, argument_separation/1, zdbbl_dist_buf_busy_limit/1]). @@ -50,7 +50,7 @@ suite() -> {timetrap, {minutes, 1}}]. all() -> - [args_file, evil_args_file, env, args_file_env, + [args_file, evil_args_file, missing_args_file, env, args_file_env, otp_7461, argument_separation, zdbbl_dist_buf_busy_limit]. %% Test that plain first argument does not @@ -230,6 +230,22 @@ evil_args_file(Config) when is_list(Config) -> Misc), ok. +missing_args_file(Config) when is_list(Config) -> + % supply an unexisting args file as parameter + CmdLine = "-args_file "++ "missing_vm_args_file", + % we're expecting a failure, capture the output + % and check for the correct error message + Output = emu_args(CmdLine, [return_output]), + % the output message format in case of failure can be consulted + % at read_args_file@erts/etc/common/erlexec.c + case re:run(Output, "Failed to open arguments file [^ ]+ at [^ ]+: No such file or directory.*") of + {match,[{0, MatchEnd}]} when MatchEnd > 0 -> + % a simple match on the regex is sufficient to decide + % that the output is properly formatted + ok; + Error -> + exit({unexpected_args_output, Output, Error}) + end. env(Config) when is_list(Config) -> os:putenv("ERL_AFLAGS", "-MiscArg1 +#100 -extra +XtraArg1 +XtraArg2"), @@ -423,11 +439,19 @@ verify_not_args(Xs, Ys) -> end, Xs). emu_args(CmdLineArgs) -> - io:format("CmdLineArgs = ~ts~n", [CmdLineArgs]), + emu_args(CmdLineArgs, []). + +emu_args(CmdLineArgs, Opts) -> + io:format("CmdLineArgs = ~ts, Opts = ~p~n", [CmdLineArgs, Opts]), {ok,[[Erl]]} = init:get_argument(progname), EmuCL = os:cmd(Erl ++ " -emu_qouted_cmd_exit " ++ CmdLineArgs), ct:pal("EmuCL = ~ts", [EmuCL]), - split_emu_clt(string:split(string:trim(EmuCL,both,"\n \""), "\" \"", all)). + case lists:member(return_output, Opts) of + true -> + EmuCL; + false -> + split_emu_clt(string:split(string:trim(EmuCL,both,"\n \""), "\" \"", all)) + end. split_emu_clt(EmuCLT) -> split_emu_clt(EmuCLT, [], [], [], emu). -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor