From d486330cef81a17b8f8217d968b3dd26f5f9a4e2 Mon Sep 17 00:00:00 2001 From: "Alexander S.Kresin" Date: Wed, 10 Apr 2002 09:21:03 +0000 Subject: [PATCH] 2002-04-10 13:22 UTC+0300 Alexander Kresin --- harbour/ChangeLog | 4 ++++ harbour/source/rdd/dbfntx/dbfntx1.c | 31 +++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index bf6373673a..ff890030a0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -7,6 +7,10 @@ For example: 2002-12-01 23:12 UTC+0100 Foo Bar */ + * contrib/libct/ctflist.txt + * state of CSETCENT() and UNSELECTED(): started. + +2002-04-14 04:50 UTC-0300 Walter Negro * include/hbapiitm.h + Add definition for hb_itemUnRefOnce(). * source/vm/itemapi.c diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index e73de8b43c..98d9545f20 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -158,6 +158,7 @@ static void hb_ntxGetCurrentKey( LPTAGINFO pTag, LPKEYINFO pKey ); static void hb_ntxTagKeyGoTo( LPTAGINFO pTag, BYTE bTypRead, BOOL * lContinue ); static LPPAGEINFO hb_ntxPageFind( LPNTXINDEX pIndex ,LONG ulOffset ); static LPPAGEINFO hb_ntxPageLast( LPNTXINDEX pIndex ); +static ERRCODE hb_ntxHeaderRead( LPNTXINDEX pIndex ); static ERRCODE hb_ntxHeaderLoad( LPNTXINDEX pIndex , char * ITN ); /* Load NTX header an fill structures pIndex */ static void hb_ntxHeaderSave( LPNTXINDEX pIndex, BOOL bFull ); @@ -1167,7 +1168,13 @@ static LPPAGEINFO hb_ntxPageLoad( LPNTXINDEX pIndex, ULONG ulOffset ) LPPAGEINFO pPage; BOOL bReplace = FALSE; - pPage = hb_ntxPageFind( pIndex, (ulOffset)? ulOffset:pIndex->CompoundTag->RootBlock ); + if( !ulOffset ) + { + if( pIndex->Owner->fShared ) + hb_ntxHeaderRead( pIndex ); + ulOffset = pIndex->CompoundTag->RootBlock; + } + pPage = hb_ntxPageFind( pIndex, ulOffset ); if( pPage ) { pPage->lBusy = TRUE; @@ -1198,7 +1205,7 @@ static LPPAGEINFO hb_ntxPageLoad( LPNTXINDEX pIndex, ULONG ulOffset ) memset( pPage , 0 ,sizeof( HB_PAGEINFO ) ); pPage->buffer = ( char* ) hb_xgrab( NTXBLOCKSIZE ); pPage->TagParent = pIndex->CompoundTag; - pPage->Page = ( ulOffset )? ulOffset:pIndex->CompoundTag->RootBlock; + pPage->Page = ulOffset; pLastPage = hb_ntxPageLast( pIndex ); pPage->pPrev = pLastPage; @@ -1211,9 +1218,9 @@ static LPPAGEINFO hb_ntxPageLoad( LPNTXINDEX pIndex, ULONG ulOffset ) pPage->TagParent->uiPages ++; } else - pPage->Page = ( !ulOffset )? pIndex->CompoundTag->RootBlock:ulOffset; + pPage->Page = ulOffset; - hb_fsSeek( pIndex->DiskFile, ( ulOffset )? ulOffset:pIndex->CompoundTag->RootBlock, FS_SET ); + hb_fsSeek( pIndex->DiskFile, ulOffset, FS_SET ); if( hb_fsRead( pIndex->DiskFile, (unsigned char *) pPage->buffer, NTXBLOCKSIZE ) != NTXBLOCKSIZE ) return NULL; @@ -2461,6 +2468,22 @@ static void hb_ntxIndexFree( LPNTXINDEX pIndex ) hb_xfree( pIndex ); } +static ERRCODE hb_ntxHeaderRead( LPNTXINDEX pIndex ) +{ + NTXHEADER Header; + ULONG ulPos; + + ulPos = hb_fsSeek( pIndex->DiskFile, 0, SEEK_END ); + hb_fsSeek( pIndex->DiskFile , 0 , 0 ); + if( hb_fsRead( pIndex->DiskFile,(BYTE*)&Header,16 ) != 16 ) + return FAILURE; + + pIndex->NextAvail = Header.next_page; + pIndex->CompoundTag->TagBlock = ulPos - 1024; + pIndex->CompoundTag->RootBlock = Header.root; + return SUCCESS; +} + static ERRCODE hb_ntxHeaderLoad( LPNTXINDEX pIndex , char *ITN) { NTXHEADER Header;