diff --git a/rtl/amicommon/sysfile.inc b/rtl/amicommon/sysfile.inc index 295a38cd71..417225eeb7 100644 --- a/rtl/amicommon/sysfile.inc +++ b/rtl/amicommon/sysfile.inc @@ -287,7 +287,7 @@ begin end; end; -{$DEFINE ASYS_FILESIZE_NO_DOUBLE_SEEK} +{$DEFINE ASYS_FILESIZE_USE_EXAMINEFH} { I changed the double-Seek filesize method which we were using for 10+ years to the new ExamineFH() method. It should be available AmigaOS 2.0+, and much faster. @@ -298,10 +298,14 @@ end; It should be safe since there are several libc implementations using the same method on all Amiga flavors, but if anyone has a problem with it, disable this define to revert to the old - method and report the issue. (KB) } + method and report the issue. (KB) + + Actually, as some file systems (FTPMount, probably more) do + not support the ExamineFH action, lets fall back to double + seek silently in that case (KB) } function do_filesize(handle : THandle) : longint; var -{$IFDEF ASYS_FILESIZE_NO_DOUBLE_SEEK} +{$IFDEF ASYS_FILESIZE_USE_EXAMINEFH} fib: PFileInfoBlock; {$ENDIF} currfilepos: longint; @@ -310,18 +314,20 @@ begin do_filesize:=-1; if CheckInList(ASYS_fileList,handle)<>nil then begin -{$IFDEF ASYS_FILESIZE_NO_DOUBLE_SEEK} +{$IFDEF ASYS_FILESIZE_USE_EXAMINEFH} fib:=AllocDosObject(DOS_FIB,nil); if fib <> nil then begin if ExamineFH(BPTR(handle), fib) then do_filesize:=fib^.fib_Size; FreeDosObject(DOS_FIB,fib); end; -{$ELSE} - currfilepos:=do_filepos(handle); - do_filesize:=do_seekend(handle); - do_seek(handle,currfilepos); {$ENDIF} + if do_filesize = -1 then + begin + currfilepos:=do_filepos(handle); + do_filesize:=do_seekend(handle); + do_seek(handle,currfilepos); + end; end; end;