X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fsfs%2Fsfs.pas;h=0f2ff81379c0802bb6936867fa1ee693d17dc1e5;hp=14919a4cb2f1f8df67e57cd56554a5d719bf4dc9;hb=fd5ef4c3c2e4c56f7b1547318b430a5d10b6860e;hpb=9dc9fb8a1d22fe93e498bc3e1cb7358fdcf5d275 diff --git a/src/sfs/sfs.pas b/src/sfs/sfs.pas index 14919a4..0f2ff81 100644 --- a/src/sfs/sfs.pas +++ b/src/sfs/sfs.pas @@ -206,6 +206,10 @@ function SFSGetLastVirtualName (const fn: TSFSString): string; // ïðåîáðàçîâàòü ÷èñëî â ñòðîêó, êðàñèâî ðàçáàâëÿÿ çàïÿòûìè function Int64ToStrComma (i: Int64): string; +// `name` will be modified +// return `true` if file was found +function sfsFindFileCI (path: string; var name: string): Boolean; + // Wildcard matching // this code is meant to allow wildcard pattern matches. tt is VERY useful // for matching filename wildcard patterns. tt allows unix grep-like pattern @@ -267,6 +271,33 @@ begin end; +// `name` will be modified +function sfsFindFileCI (path: string; var name: string): Boolean; +var + sr: TSearchRec; + bestname: string = ''; +begin + if length(path) = 0 then path := '.'; + while (length(path) > 0) and (path[length(path)] = '/') do Delete(path, length(path), 1); + if (length(path) = 0) or (path[length(path)] <> '/') then path := path+'/'; + if FileExists(path+name) then begin result := true; exit; end; + if FindFirst(path+'*', faAnyFile, sr) = 0 then + repeat + if (sr.name = '.') or (sr.name = '..') then continue; + if (sr.attr and faDirectory) <> 0 then continue; + if sr.name = name then + begin + FindClose(sr); + result := true; + exit; + end; + if (length(bestname) = 0) and SFSStrEqu(sr.name, name) then bestname := sr.name; + until FindNext(sr) <> 0; + FindClose(sr); + if length(bestname) > 0 then begin result := true; name := bestname; end else result := false; +end; + + const // character defines WILD_CHAR_ESCAPE = '\';