aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-02-12 11:13:04 +0100
committerBjörn Gustavsson <[email protected]>2013-02-13 11:58:45 +0100
commit3fafadfc76d061d5d2f30afde3e647f8b8282e37 (patch)
tree2dd8fd03a447f09d247d9f9b132541399f4939c0 /lib/stdlib
parentc84311ffe08d12c96d38b6464b2f0ba8cd567e42 (diff)
downloadotp-3fafadfc76d061d5d2f30afde3e647f8b8282e37.tar.gz
otp-3fafadfc76d061d5d2f30afde3e647f8b8282e37.tar.bz2
otp-3fafadfc76d061d5d2f30afde3e647f8b8282e37.zip
Only sort the result list once, just before returning
There does not seem to be any advantage of sorting the result of file:list_dir/1 directly. Disadvantages are that we'll need to be careful to keep the result sorted, and that we could waste time sorting filenames that the pattern matching will discard anyway.
Diffstat (limited to 'lib/stdlib')
-rw-r--r--lib/stdlib/src/filelib.erl20
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl
index 8a32220a7b..c936d08db4 100644
--- a/lib/stdlib/src/filelib.erl
+++ b/lib/stdlib/src/filelib.erl
@@ -252,13 +252,14 @@ ensure_dir(F) ->
do_wildcard(Pattern, Cwd, Mod) ->
{Compiled,PrefixLen} = compile_wildcard(Pattern, Cwd),
- Files = do_wildcard_1(Compiled, Mod),
- if
- PrefixLen =:= 0 ->
- Files;
- true ->
- [lists:nthtail(PrefixLen, File) || File <- Files]
- end.
+ Files0 = do_wildcard_1(Compiled, Mod),
+ Files = if
+ PrefixLen =:= 0 ->
+ Files0;
+ true ->
+ [lists:nthtail(PrefixLen, File) || File <- Files0]
+ end,
+ lists:sort(Files).
do_wildcard_1({exists,File}, Mod) ->
case eval_read_file_info(File, Mod) of
@@ -274,12 +275,11 @@ do_wildcard_2([], _, Result, _Mod) ->
Result.
do_wildcard_3(Base, [[double_star]|Rest], Result, Mod) ->
- lists:sort(do_double_star(".", [Base], Rest, Result, Mod, true));
+ do_double_star(".", [Base], Rest, Result, Mod, true);
do_wildcard_3(Base0, [Pattern|Rest], Result, Mod) ->
case do_list_dir(Base0, Mod) of
- {ok, Files0} ->
+ {ok, Files} ->
Base = prepare_base(Base0),
- Files = lists:sort(Files0),
Matches = wildcard_4(Pattern, Files, Base, []),
do_wildcard_2(Matches, Rest, Result, Mod);
_ ->