Support environment vars with unicode characters

The results returned by os:getenv() may contain unicode characters.
That said, we need to explicitly allow unicode when splitting the
environment information, otherwise badarg will be raised causing all
rebar commands to fail until the environment variable is removed.
This commit is contained in:
José Valim 2012-11-20 10:26:31 +01:00 committed by Leo Lou
parent 7dad2b384b
commit 61c353dcfd

View file

@ -399,7 +399,7 @@ expand_vars_loop([], Recurse, Vars, Count) ->
expand_vars_loop(Recurse, [], Vars, Count-1); expand_vars_loop(Recurse, [], Vars, Count-1);
expand_vars_loop([{K, V} | Rest], Recurse, Vars, Count) -> expand_vars_loop([{K, V} | Rest], Recurse, Vars, Count) ->
%% Identify the variables that need expansion in this value %% Identify the variables that need expansion in this value
ReOpts = [global, {capture, all_but_first, list}], ReOpts = [global, {capture, all_but_first, list}, unicode],
case re:run(V, "\\\${?(\\w+)}?", ReOpts) of case re:run(V, "\\\${?(\\w+)}?", ReOpts) of
{match, Matches} -> {match, Matches} ->
%% Identify the unique variables that need to be expanded %% Identify the unique variables that need to be expanded
@ -472,8 +472,8 @@ erts_dir() ->
lists:concat([code:root_dir(), "/erts-", erlang:system_info(version)]). lists:concat([code:root_dir(), "/erts-", erlang:system_info(version)]).
os_env() -> os_env() ->
Os = [list_to_tuple(re:split(S, "=", [{return, list}, {parts, 2}])) || ReOpts = [{return, list}, {parts, 2}, unicode],
S <- os:getenv()], Os = [list_to_tuple(re:split(S, "=", ReOpts)) || S <- os:getenv()],
%% Drop variables without a name (win32) %% Drop variables without a name (win32)
[T1 || {K, _V} = T1 <- Os, K =/= []]. [T1 || {K, _V} = T1 <- Os, K =/= []].