From 12fd50c890cc06605be59e75437d16574aa014a7 Mon Sep 17 00:00:00 2001 From: reiniero Date: Sat, 27 Apr 2013 08:07:04 +0000 Subject: [PATCH] fcl-db/dbase: * fixed tests TTestSpecificTDBF.TestCodePage and TestTableLevel * fixed division by zero for null length record size memos (e.g. if no memo file present) git-svn-id: trunk@24338 - --- packages/fcl-db/src/dbase/dbf_memo.pas | 7 ++++--- packages/fcl-db/tests/testspecifictdbf.pas | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/fcl-db/src/dbase/dbf_memo.pas b/packages/fcl-db/src/dbase/dbf_memo.pas index f80d25b08b..b642dba3e1 100644 --- a/packages/fcl-db/src/dbase/dbf_memo.pas +++ b/packages/fcl-db/src/dbase/dbf_memo.pas @@ -66,7 +66,7 @@ type procedure SetBlockLen(BlockLen: Integer); override; end; - { TNullMemoFile, a kind /dev/null memofile ;-) } + { TNullMemoFile, a kind of /dev/null memofile ;-) } { - inv: FHeaderModified == false!! (otherwise will try to write FStream) } { - inv: FHeaderSize == 0 } { - inv: FNeedLocks == false } @@ -387,8 +387,9 @@ begin end; // if ((bytesBefore + Src.Size + bytesAfter + PDbtHdr(Header).BlockLen-1) div PDbtHdr(Header).BlockLen) // <= ((ReadSize + PDbtHdr(Header).BlockLen-1) div PDbtHdr(Header).BlockLen) then - if ((bytesBefore + Src.Size + bytesAfter + RecordSize-1) div RecordSize) - <= ((ReadSize + RecordSize-1) div RecordSize) then + // If null memo is used, recordsize may be 0. Test for that. + if (RecordSize=0) or (((bytesBefore + Src.Size + bytesAfter + RecordSize-1) div RecordSize) + <= ((ReadSize + RecordSize-1) div RecordSize)) then begin append := false; end else begin diff --git a/packages/fcl-db/tests/testspecifictdbf.pas b/packages/fcl-db/tests/testspecifictdbf.pas index aff893f126..75039fd482 100644 --- a/packages/fcl-db/tests/testspecifictdbf.pas +++ b/packages/fcl-db/tests/testspecifictdbf.pas @@ -108,9 +108,9 @@ procedure TTestSpecificTDBF.TestTableLevel; var ds : TDBF; begin + ds := TDBFAutoClean.Create(nil); if ((DS as TDBFAutoClean).UserRequestedTableLevel=25) then ignore('Foxpro (tablelevel 25) may write data out in dBase IV (tablelevel 4) format.'); - ds := TDBFAutoClean.Create(nil); DS.FieldDefs.Add('ID',ftInteger); DS.CreateTable; DS.Open; @@ -422,9 +422,9 @@ var CorrespondingCodePage: integer; ds : TDBF; begin + ds := TDBFAutoClean.Create(nil); if ((DS as TDBFAutoClean).UserRequestedTableLevel=25) then ignore('Foxpro (tablelevel 25) may write data out in dBase IV (tablelevel 4) format.'); - ds := TDBFAutoClean.Create(nil); DS.FieldDefs.Add('ID',ftInteger); if ((DS as TDBFAutoClean).UserRequestedTableLevel in [7,30]) then begin