diff options
author | Björn Gustavsson <[email protected]> | 2012-09-11 15:03:53 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2012-09-12 09:28:31 +0200 |
commit | 70b5e24c9498225fadc08d19503269c8aad851bf (patch) | |
tree | 2f8388de5d5bccb89b620c3fe8683da0bbb77418 /lib/stdlib/src | |
parent | d1a037921309a48cd80db1c53f4de4bb08ae4f4f (diff) | |
download | otp-70b5e24c9498225fadc08d19503269c8aad851bf.tar.gz otp-70b5e24c9498225fadc08d19503269c8aad851bf.tar.bz2 otp-70b5e24c9498225fadc08d19503269c8aad851bf.zip |
Fix filelib:wildcard/2
filelib:wildcard("some/relative/path/*.beam", Path) would fail to
match any file. That is, filelib:wildcard/2 would not work if the
first component of the pattern did not contain any wildcard
characters.
Noticed-by: Samuel Rivas
Diffstat (limited to 'lib/stdlib/src')
-rw-r--r-- | lib/stdlib/src/filelib.erl | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl index fa4f92617c..6b19713609 100644 --- a/lib/stdlib/src/filelib.erl +++ b/lib/stdlib/src/filelib.erl @@ -132,6 +132,8 @@ do_wildcard_comp({compiled_wildcard,{exists,File}}, Mod) -> {ok,_} -> [File]; _ -> [] end; +do_wildcard_comp({compiled_wildcard,[cwd,Base|Rest]}, Mod) -> + do_wildcard_1([Base], Rest, Mod); do_wildcard_comp({compiled_wildcard,[Base|Rest]}, Mod) -> do_wildcard_1([Base], Rest, Mod). @@ -143,7 +145,11 @@ do_wildcard_comp({compiled_wildcard,{exists,File}}, Cwd, Mod) -> {ok,_} -> [File]; _ -> [] end; -do_wildcard_comp({compiled_wildcard,[current|Rest]}, Cwd0, Mod) -> +do_wildcard_comp({compiled_wildcard,[cwd|Rest0]}, Cwd0, Mod) -> + case Rest0 of + [current|Rest] -> ok; + Rest -> ok + end, {Cwd,PrefixLen} = case filename:join([Cwd0]) of Bin when is_binary(Bin) -> {Bin,byte_size(Bin)+1}; Other -> {Other,length(Other)+1} @@ -383,7 +389,10 @@ compile_wildcard_1(Pattern) -> [Root|Rest] = filename:split(Pattern), case filename:pathtype(Root) of relative -> - compile_wildcard_2([Root|Rest], current); + case compile_wildcard_2([Root|Rest], current) of + {exists,_}=Wc -> Wc; + [_|_]=Wc -> [cwd|Wc] + end; _ -> compile_wildcard_2(Rest, [Root]) end. |