X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fengine%2Fe_res.pas;h=e48cc32ed5746264150eb419cbf14ee36db99135;hb=cf154570c3e691c4b95c021376c810020d689167;hp=a4f9da50bd829c9fc28605d850bd0b60df8e12f7;hpb=a959696d242bc66e6890d281eb6e5d627c2588e9;p=d2df-sdl.git diff --git a/src/engine/e_res.pas b/src/engine/e_res.pas index a4f9da5..e48cc32 100644 --- a/src/engine/e_res.pas +++ b/src/engine/e_res.pas @@ -51,7 +51,8 @@ interface {--- returns relative wad name; never empty string ---} function e_FindWadRel (dirs: SSArray; name: AnsiString): AnsiString; - {--- append dirs to 'path.wad:\file'. if disk is void, append defWad ---} + {--- prepend dirs to 'disk.wad:\file'. if empty disk string then prepend defWad ---} + {--- return empty string if error occured or 'path/to/disk.wad:\file' on success ---} function e_GetResourcePath (dirs: SSArray; path: AnsiString; defWad: AnsiString): AnsiString; {--- same as SysUtils.FinFirst ---} @@ -62,6 +63,8 @@ interface {--- 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; @@ -248,15 +251,14 @@ implementation var diskName, fileName: AnsiString; begin if debug_e_res then - e_LogWritefln('e_GetResourcePath0 %s (%s)', [path, defWad]); + e_LogWritefln('e_GetResourcePath %s (%s)', [path, defWad]); assert(length(dirs) > 0); assert(path <> ''); assert(defWad <> ''); diskName := g_ExtractWadName(path); fileName := g_ExtractFilePathName(path); if diskName = '' then diskName := defWad else diskName := e_FindWad(dirs, diskName); - assert(diskName <> '', 'oh fuck, wad "' + diskName + '" not founded'); - result := diskName + ':\' + fileName; + if diskName = '' then result := '' else result := diskName + ':\' + fileName; if debug_e_res then e_LogWritefln(' this>>> %s', [result]); end; @@ -280,7 +282,7 @@ implementation 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; @@ -337,7 +339,7 @@ implementation 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);