diff --git a/src/engine/e_res.pas b/src/engine/e_res.pas
index a6d4bd5349806af849ef63eb4bcb27015e4dc808..69adb6e6eb5faa6b5e4fd98c0d919b270cb50501 100644 (file)
--- a/src/engine/e_res.pas
+++ b/src/engine/e_res.pas
{--- creates all necessary subdirs, if it can ---}
function e_GetWriteableDir (dirs: SSArray; required: Boolean=true): AnsiString;
+ function e_CanCreateFilesAt (dir: AnsiString): Boolean;
+
implementation
uses WadReader, e_log, hashtable;
function e_UpperDir (path: AnsiString): AnsiString;
var i: Integer;
begin
- i := High(path);
+ i := High(path); // consider possible cases: '\a\', '\a', '\abc\'
while (i >= 1) and (path[i] <> '/') and (path[i] <> '\') do Dec(i);
- result := Copy(path, 1, i)
+ result := Copy(path, 1, i-1) // exclude the trailing separator
end;
function HasRelativeDirs (name: AnsiString): Boolean;
end;
// k8: sorry. i know that this sux, but checking directory access rights is unreliable (unportable).
- function canCreateFiles (dir: AnsiString): Boolean;
+ function e_CanCreateFilesAt (dir: AnsiString): Boolean;
var
f: Integer;
st: TStream = nil;
result := dirs[f];
if (findFileCI(result, true)) then
begin
- if canCreateFiles(result) then
+ if e_CanCreateFilesAt(result) then
begin
if not assigned(writeableDirs) then writeableDirs := THashStrCIStr.Create();
writeableDirs.put(dirs[f], result);