diff --git a/src/sfs/sfs.pas b/src/sfs/sfs.pas
index 14919a4cb2f1f8df67e57cd56554a5d719bf4dc9..0f2ff81379c0802bb6936867fa1ee693d17dc1e5 100644 (file)
--- a/src/sfs/sfs.pas
+++ b/src/sfs/sfs.pas
// ïðåîáðàçîâàòü ÷èñëî â ñòðîêó, êðàñèâî ðàçáàâëÿÿ çàïÿòûìè
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
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 = '\';