2002-04-19 11:33 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>

This commit is contained in:
Alexander S.Kresin
2002-04-19 07:31:53 +00:00
parent b7ccbc86e8
commit d1c9ea097f
4 changed files with 28 additions and 78 deletions

View File

@@ -7,6 +7,12 @@
For example:
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
* source/rdd/workarea.c
! fixed bug with set relation to, found by Walter Negro.
2002-04-23 20:40 UTC-0300 Walter Negro <anegro@overnet.com.ar>
* source/rtl/devoutp.prg
! More compliant with Cli**er for certain types of data.
Now only accept character, memo, numeric, date and logical
types of data.
Any other types of data is ignored.

View File

@@ -88,8 +88,9 @@ extern "C" {
#define PREV_RECORD 3
#define NEXT_RECORD 4
#define NTX_MAX_KEY 256 /* Max len of key */
#define NTXBLOCKSIZE 1024 /* Size of block in NTX file */
#define NTX_MAX_KEY 256 /* Max len of key */
#define NTXBLOCKSIZE 1024 /* Size of block in NTX file */
#define NTX_LOCK_OFFSET 1000000000
/* forward declarations
*/
@@ -410,8 +411,8 @@ static ERRCODE ntxSetScope( NTXAREAP pArea, LPDBORDSCOPEINFO sInfo );
#define ntxError NULL
#define ntxEvalBlock NULL
#define ntxRawLock NULL
static ERRCODE ntxLock( NTXAREAP pArea, LPDBLOCKINFO pLockInfo );
static ERRCODE ntxUnLock( NTXAREAP pArea, ULONG ulRecNo );
#define ntxLock NULL
#define ntxUnLock NULL
#define ntxCloseMemFile NULL
#define ntxCreateMemFile NULL
#define ntxGetValueFile NULL

View File

@@ -2499,13 +2499,18 @@ ERRCODE hb_dbfWriteDBHeader( DBFAREAP pArea )
/* Update record count */
if( pArea->fShared )
{
hb_fsLock( pArea->hDataFile, DBF_LOCKPOS, 1, FL_LOCK );
pArea->ulRecCount = hb_dbfCalcRecCount( pArea );
}
dbfHeader.ulRecCount = pArea->ulRecCount;
dbfHeader.uiHeaderLen = pArea->uiHeaderLen;
dbfHeader.uiRecordLen = pArea->uiRecordLen;
hb_fsSeek( pArea->hDataFile, 0, FS_SET );
hb_fsWrite( pArea->hDataFile, ( BYTE * ) &dbfHeader, sizeof( DBFHEADER ) );
if( pArea->fShared )
hb_fsLock( pArea->hDataFile, DBF_LOCKPOS, 1, FL_UNLOCK );
pArea->fUpdateHeader = FALSE;
return SUCCESS;
}

View File

@@ -112,8 +112,6 @@
* ntxOrderListFocus()
* ntxOrderListRebuild()
* ntxSetScope()
* ntxLock()
* static ERRCODE ntxUnLock()
*/
#include <math.h>
@@ -377,7 +375,7 @@ static ULONG hb_ntxTagKeyNo( LPTAGINFO pTag )
if( pTag->Owner->Owner->fShared )
{
while( !hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_LOCK ) );
while( !hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_LOCK ) );
pTag->Owner->Locked = TRUE;
}
@@ -442,7 +440,7 @@ static ULONG hb_ntxTagKeyNo( LPTAGINFO pTag )
if( pTag->Owner->Owner->fShared )
{
hb_ntxPageFree( pTag->RootPage,FALSE );
hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_UNLOCK );
hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_UNLOCK );
pTag->Owner->Locked = FALSE;
}
return ulKeyNo;
@@ -457,7 +455,7 @@ static ULONG hb_ntxTagKeyCount( LPTAGINFO pTag )
if( pTag->Owner->Owner->fShared )
{
while( !hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_LOCK ) );
while( !hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_LOCK ) );
pTag->Owner->Locked = TRUE;
}
else if( pTag->keyCount )
@@ -514,7 +512,7 @@ static ULONG hb_ntxTagKeyCount( LPTAGINFO pTag )
if( pTag->Owner->Owner->fShared )
{
hb_ntxPageFree( pTag->RootPage,FALSE );
hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_UNLOCK );
hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_UNLOCK );
pTag->Owner->Locked = FALSE;
}
else
@@ -1080,7 +1078,7 @@ static void hb_ntxTagKeyGoTo( LPTAGINFO pTag, BYTE bTypRead, BOOL * lContinue )
{
if( pTag->Owner->Owner->fShared && !pTag->Owner->Locked )
{
while( !hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_LOCK ) );
while( !hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_LOCK ) );
wasLocked = pTag->Owner->Locked;
pTag->Owner->Locked = TRUE;
}
@@ -1111,7 +1109,7 @@ static void hb_ntxTagKeyGoTo( LPTAGINFO pTag, BYTE bTypRead, BOOL * lContinue )
// pTag->RootPage = NULL;
if( !wasLocked )
{
hb_fsLock( pTag->Owner->DiskFile, 0, 512, FL_UNLOCK );
hb_fsLock( pTag->Owner->DiskFile, NTX_LOCK_OFFSET, 1, FL_UNLOCK );
pTag->Owner->Locked = FALSE;
}
}
@@ -2918,7 +2916,7 @@ static ERRCODE ntxSeek( NTXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFin
if( pArea->fShared )
{
while( !hb_fsLock( pArea->lpCurIndex->DiskFile, 0, 512, FL_LOCK ) );
while( !hb_fsLock( pArea->lpCurIndex->DiskFile, NTX_LOCK_OFFSET, 1, FL_LOCK ) );
pArea->lpCurIndex->Locked = TRUE;
}
lRecno = hb_ntxTagKeyFind( pTag, pKey2, &result );
@@ -2953,7 +2951,7 @@ static ERRCODE ntxSeek( NTXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFin
if( pArea->fShared )
{
hb_ntxPageFree( pTag->RootPage,FALSE );
hb_fsLock( pArea->lpCurIndex->DiskFile, 0, 512, FL_UNLOCK );
hb_fsLock( pArea->lpCurIndex->DiskFile, NTX_LOCK_OFFSET, 1, FL_UNLOCK );
pArea->lpCurIndex->Locked = FALSE;
}
pArea->fEof = pTag->TagEOF;
@@ -3090,7 +3088,7 @@ static ERRCODE ntxGoCold( NTXAREAP pArea )
{
pArea->lpCurIndex = lpIndex;
if( pArea->fShared )
while( !hb_fsLock( lpIndex->DiskFile, 0, 512, FL_LOCK ) );
while( !hb_fsLock( lpIndex->DiskFile, NTX_LOCK_OFFSET, 1, FL_LOCK ) );
if( !fAppend && pTag->InIndex )
{
LPKEYINFO pKeyOld = hb_ntxKeyNew( pTag->CurKeyInfo,pTag->KeyLength );
@@ -3125,8 +3123,7 @@ static ERRCODE ntxGoCold( NTXAREAP pArea )
if( pArea->fShared )
{
hb_ntxPageFree( pTag->RootPage,FALSE );
// pTag->RootPage = NULL;
hb_fsLock( lpIndex->DiskFile, 0, 512, FL_UNLOCK );
hb_fsLock( lpIndex->DiskFile, NTX_LOCK_OFFSET, 1, FL_UNLOCK );
}
}
lpIndex = lpIndex->pNext;
@@ -3842,65 +3839,6 @@ static ERRCODE ntxSetScope( NTXAREAP pArea, LPDBORDSCOPEINFO sInfo )
return SUCCESS;
}
static ERRCODE ntxLock( NTXAREAP pArea, LPDBLOCKINFO pLockInfo )
{
HB_TRACE(HB_TR_DEBUG, ("ntxLock(%p, %p)", pArea, pLockInfo));
if( SUPER_LOCK( ( AREAP ) pArea, pLockInfo ) )
{
LPNTXINDEX lpIndex;
if( pLockInfo->uiMethod == DBLM_FILE )
{
lpIndex = pArea->lpNtxIndex;
while( lpIndex )
{
pArea->lpCurIndex = lpIndex;
/* First 512 bytes of index file are blocked.
I don't sure, is it right - should be checked.
= Alexander Kresin =
*/
if( !hb_fsLock( lpIndex->DiskFile, 0, 512, FL_LOCK ) )
{
ntxUnLock( pArea,0 );
return FAILURE;
}
lpIndex = lpIndex->pNext;
}
}
return SUCCESS;
}
else
return FAILURE;
}
static ERRCODE ntxUnLock( NTXAREAP pArea, ULONG ulRecNo )
{
BOOL fFLocked;
HB_TRACE(HB_TR_DEBUG, ("ntxUnLock(%p, %lu)", pArea, ulRecNo));
fFLocked = pArea->fFLocked;
if( SUPER_UNLOCK( ( AREAP ) pArea, ulRecNo ) )
{
LPNTXINDEX lpIndex;
if( fFLocked )
{
lpIndex = pArea->lpNtxIndex;
while( lpIndex )
{
pArea->lpCurIndex = lpIndex;
hb_fsLock( lpIndex->DiskFile, 0, 512, FL_UNLOCK );
lpIndex = lpIndex->pNext;
}
}
return SUCCESS;
}
else
return FAILURE;
}
static RDDFUNCS ntxTable = { ntxBof,
ntxEof,
ntxFound,
@@ -3983,8 +3921,8 @@ static RDDFUNCS ntxTable = { ntxBof,
ntxError,
ntxEvalBlock,
ntxRawLock,
( DBENTRYP_VL ) ntxLock,
( DBENTRYP_UL ) ntxUnLock,
ntxLock,
ntxUnLock,
ntxCloseMemFile,
ntxCreateMemFile,
ntxGetValueFile,