DEADSOFTWARE

sfs: remove common dir from pk3 (this should fix invalid zips)
[d2df-sdl.git] / src / sfs / sfs.pas
index f79413a237e5f2fe3225ca5993bd07b094e980b0..3776a0036d7742c6df3160222d12328f5d35e3b1 100644 (file)
@@ -73,6 +73,8 @@ type
     // íèêàêèõ ïàäåíèé íà íåïðàâèëüíûå èíäåêñû!
     function GetFiles (index: Integer): TSFSFileInfo; virtual;
 
+    procedure removeCommonPath (); virtual;
+
   public
     // pSt íå îáÿçàòåëüíî çàïîìèíàòü, åñëè îí íå íóæåí.
     constructor Create (const pFileName: TSFSString; pSt: TStream); virtual;
@@ -224,6 +226,11 @@ function WildMatch (pattern, text: TSFSString): Boolean;
 function WildListMatch (wildList, text: TSFSString; delimChar: AnsiChar=':'): Integer;
 function HasWildcards (const pattern: TSFSString): Boolean;
 
+// this will compare only last path element from sfspath
+function SFSDFPathEqu (sfspath: string; path: string): Boolean;
+
+function SFSUpCase (ch: Char): Char;
+
 
 var
   // ïðàâäà: ðàçðåøåíî èñêàòü ôàéëî íå òîëüêî â ôàéëàõ äàííûõ, íî è íà äèñêå.
@@ -543,7 +550,7 @@ begin
   end;
 end;
 
-function le2upper (ch: Char): Char;
+function SFSUpCase (ch: Char): Char;
 begin
   if ch < #128 then
   begin
@@ -575,11 +582,32 @@ begin
   if length(s0) <> length(s1) then exit;
   for i := 1 to length(s0) do
   begin
-    if le2upper(s0[i]) <> le2upper(s1[i]) then exit;
+    if SFSUpCase(s0[i]) <> SFSUpCase(s1[i]) then exit;
   end;
   result := true;
 end;
 
+// this will compare only last path element from sfspath
+function SFSDFPathEqu (sfspath: string; path: string): Boolean;
+{var
+  i: Integer;}
+begin
+  result := SFSStrEqu(sfspath, path);
+(*
+  if not result and (length(sfspath) > 1) then
+  begin
+    i := length(sfspath);
+    while i > 1 do
+    begin
+      while (i > 1) and (sfspath[i-1] <> '/') do Dec(i);
+      if i <= 1 then exit;
+      writeln('{', sfspath, '} [', Copy(sfspath, i, length(sfspath)), '] : [', path, ']');
+      result := SFSStrEqu(Copy(sfspath, i, length(sfspath)), path);
+    end;
+  end;
+*)
+end;
+
 function SFSReplacePathDelims (const s: TSFSString; newDelim: TSFSChar): TSFSString;
 var
   f: Integer;
@@ -700,6 +728,10 @@ begin
   fFiles := TObjectList.Create(true);
 end;
 
+procedure TSFSVolume.removeCommonPath ();
+begin
+end;
+
 procedure TSFSVolume.DoDirectoryRead ();
 var
   fl: TStringList; //!!!FIXME! change to list of wide TSFSStrings or so!
@@ -755,6 +787,7 @@ begin
     fl.Free();
     raise;
   end;
+  removeCommonPath();
 end;
 
 destructor TSFSVolume.Destroy ();