aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded/src/erl_prim_loader.erl
diff options
context:
space:
mode:
authorPatrik Nyblom <[email protected]>2013-01-29 17:28:20 +0100
committerBjörn Gustavsson <[email protected]>2013-02-11 14:11:37 +0100
commitaa15249fe5d8819e511ca0f09eae1d1207903e53 (patch)
treefda2d2070eeebb19ba941fe70ce8ee753f279976 /erts/preloaded/src/erl_prim_loader.erl
parent066c26ec53012ccea106a4f27b85ddbdb58bb2bc (diff)
downloadotp-aa15249fe5d8819e511ca0f09eae1d1207903e53.tar.gz
otp-aa15249fe5d8819e511ca0f09eae1d1207903e53.tar.bz2
otp-aa15249fe5d8819e511ca0f09eae1d1207903e53.zip
Make prim_file skip invalid filenames in unicode mode
The fix affects list_dir and read_link. Raw filenames are now never produced, just consumed even if +fnu or +fna is used on Linux etc. This also adds the options to get error return or error handler warning messages with +fn{u|a}{i|w|e} as an option to erl. This is still not documented and there needs to be other versions of read_dir and read_link to facilitate reading of all types of filenames and links. A check that we will not change to an invalid directory is also needed.
Diffstat (limited to 'erts/preloaded/src/erl_prim_loader.erl')
-rw-r--r--erts/preloaded/src/erl_prim_loader.erl12
1 files changed, 11 insertions, 1 deletions
diff --git a/erts/preloaded/src/erl_prim_loader.erl b/erts/preloaded/src/erl_prim_loader.erl
index c2fac8c0fc..7490954f2d 100644
--- a/erts/preloaded/src/erl_prim_loader.erl
+++ b/erts/preloaded/src/erl_prim_loader.erl
@@ -150,7 +150,17 @@ start_it("inet", Id, Pid, Hosts) ->
start_it("efile", Id, Pid, _Hosts) ->
process_flag(trap_exit, true),
{ok, Port} = prim_file:start(),
- init_ack(Pid),
+ %% Check that we started in a valid directory.
+ case prim_file:get_cwd(Port) of
+ {error, _} ->
+ %% At this point in the startup, we have no error_logger at all.
+ Report = "Invalid current directory or invalid filename "
+ "mode: loader cannot read current directory\n",
+ erlang:display(Report),
+ exit({error, invalid_current_directory});
+ _ ->
+ init_ack(Pid)
+ end,
MultiGet = case erlang:system_info(thread_pool_size) of
0 -> false;
_ -> true