2017-09-08 16:00 UTC Viktor Szakats (vszakats users.noreply.github.com)
* *
* partial sync with the 3.4 fork codebase. These are the things
synces for the most part:
- copyright headers
- grammar/typos in comments and some readmes
- comment/whitespace/decorations
- variable scoping in C files
- DO CASE/SWITCH and some other alternate syntax usage
- minimal amount of human readable text in strings
- minor code updates
- HB_TRACE() void * casts for pointers and few other changes to
avoid C compiler warnings
- various other, minor code cleanups
- only Harbour/C code/headers were touched in src, utils, contrib,
include. No 3rd party code, no make files, and with just a few
exceptions, no 'tests' code was touched.
- certain components were not touched were 3.4 diverged too much
already, like f.e. hbmk2, hbssl, hbcurl, hbexpat
- the goal was that no actual program logic should be altered by
these changes. Except some possible minor exceptions, any such
change is probably a bug in this patch.
It's a massive patch, if you find anything broken after it, please
open an Issue with the details. Build test was done on macOS.
The goal is make it easier to see what actual code/logic was changed
in 3.4 compared to 3.2 and to make patches easier to apply in both
ways.
This commit is contained in:
@@ -315,16 +315,16 @@ static HB_ERRCODE hb_fptPutRootBlock( FPTAREAP pArea, HB_ULONG ulBlock )
|
||||
/*
|
||||
GARBAGE COLLECTOR:
|
||||
I don't have any documentation about it. All I know is reverse engineering
|
||||
or analyzes of other sources. If any one can tell me sth more about it then
|
||||
I will be really glad. I use method one for SixMemo and method 2 for FLEX
|
||||
memos.
|
||||
or analyzes of other sources. If any one can tell me something more about it
|
||||
then I will be really glad. I use method one for SixMemo and method 2 for
|
||||
FLEX memos.
|
||||
|
||||
Method 1.
|
||||
FPTHEADER->reserved2[492] is a list of free pages,
|
||||
6 bytes for each page
|
||||
size[2] (size in blocks) (little endian)
|
||||
block[4] (block number) (little endian)
|
||||
signature1[12] has to be cutted down to
|
||||
signature1[12] has to be cut down to
|
||||
10 bytes. The last 2 bytes becomes the
|
||||
number of entries in free block list (max 82)
|
||||
|
||||
@@ -369,7 +369,7 @@ static HB_ERRCODE hb_fptPutRootBlock( FPTAREAP pArea, HB_ULONG ulBlock )
|
||||
the number of items 2 - means branch node, 3-leaf node. The value in
|
||||
GC node is calculated as:
|
||||
( nItem << 2 ) | FPTGCNODE_TYPE
|
||||
Each item in branch node has 12 bytes and inside them 3 32bit little
|
||||
Each item in branch node has 12 bytes and inside them 3 32-bit little
|
||||
endian values in pages sorted by offset the are:
|
||||
offset,size,subpage
|
||||
and in pages sorted by size:
|
||||
@@ -387,22 +387,26 @@ static HB_ERRCODE hb_fptPutRootBlock( FPTAREAP pArea, HB_ULONG ulBlock )
|
||||
*/
|
||||
static void hb_fptSortGCitems( LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
HB_ULONG ulOffset, ulSize;
|
||||
HB_BOOL fChanged, fMoved = HB_TRUE;
|
||||
int i, j, l;
|
||||
HB_BOOL fMoved = HB_TRUE;
|
||||
int l;
|
||||
|
||||
/* this table should be allready quite good sorted so this simple
|
||||
/* this table should be already quite good sorted so this simple
|
||||
algorithms will be the most efficient one.
|
||||
It will need only one or two passes */
|
||||
l = pGCtable->usItems - 1;
|
||||
while( fMoved )
|
||||
{
|
||||
int i, j;
|
||||
|
||||
fMoved = HB_FALSE;
|
||||
j = l;
|
||||
for( i = 0; i < j; i++ )
|
||||
{
|
||||
if( pGCtable->pGCitems[ i ].ulSize > pGCtable->pGCitems[ i + 1 ].ulSize )
|
||||
{
|
||||
HB_ULONG ulOffset, ulSize;
|
||||
HB_BOOL fChanged;
|
||||
|
||||
ulOffset = pGCtable->pGCitems[ i + 1 ].ulOffset;
|
||||
ulSize = pGCtable->pGCitems[ i + 1 ].ulSize;
|
||||
fChanged = pGCtable->pGCitems[ i + 1 ].fChanged;
|
||||
@@ -425,17 +429,16 @@ static void hb_fptSortGCitems( LPMEMOGCTABLE pGCtable )
|
||||
*/
|
||||
static void hb_fptPackGCitems( LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
HB_ULONG ulEnd;
|
||||
int i, j;
|
||||
|
||||
/* TODO: better alogrithm this primitve one can be too slow for big
|
||||
/* TODO: better algorithm this primitive one can be too slow for big
|
||||
free block list table */
|
||||
for( i = 0; i < pGCtable->usItems; i++ )
|
||||
{
|
||||
if( pGCtable->pGCitems[ i ].ulOffset != 0 &&
|
||||
pGCtable->pGCitems[ i ].ulSize != 0 )
|
||||
{
|
||||
ulEnd = pGCtable->pGCitems[ i ].ulOffset + pGCtable->pGCitems[ i ].ulSize;
|
||||
HB_ULONG ulEnd = pGCtable->pGCitems[ i ].ulOffset + pGCtable->pGCitems[ i ].ulSize;
|
||||
if( ulEnd == pGCtable->ulNextBlock )
|
||||
{
|
||||
pGCtable->ulNextBlock -= pGCtable->pGCitems[ i ].ulSize;
|
||||
@@ -486,11 +489,14 @@ static HB_ERRCODE hb_fptWriteGCitems( FPTAREAP pArea, LPMEMOGCTABLE pGCtable, HB
|
||||
{
|
||||
FPTBLOCK fptBlock;
|
||||
HB_ERRCODE errCode = HB_SUCCESS;
|
||||
int i /* ,iStart, iStop */;
|
||||
int i;
|
||||
#if 0
|
||||
int iStart, iStop;
|
||||
#endif
|
||||
|
||||
HB_SYMBOL_UNUSED( usItem );
|
||||
|
||||
/*
|
||||
#if 0
|
||||
if( usItem == 0 )
|
||||
{
|
||||
iStart = 0;
|
||||
@@ -501,7 +507,7 @@ static HB_ERRCODE hb_fptWriteGCitems( FPTAREAP pArea, LPMEMOGCTABLE pGCtable, HB
|
||||
iStart = usItem;
|
||||
iStop = usItem + 1;
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
for( i = 0; i < pGCtable->usItems; i++ )
|
||||
{
|
||||
@@ -712,7 +718,7 @@ static HB_ERRCODE hb_fptGCgetFreeBlock( FPTAREAP pArea, LPMEMOGCTABLE pGCtable,
|
||||
}
|
||||
|
||||
/*
|
||||
* Init GC table free memo blok list.
|
||||
* Init GC table free memo block list.
|
||||
*/
|
||||
static void hb_fptInitGCdata( LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
@@ -720,7 +726,7 @@ static void hb_fptInitGCdata( LPMEMOGCTABLE pGCtable )
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean GC table free memo blok list.
|
||||
* Clean GC table free memo block list.
|
||||
*/
|
||||
static void hb_fptDestroyGCdata( LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
@@ -739,7 +745,6 @@ static void hb_fptDestroyGCdata( LPMEMOGCTABLE pGCtable )
|
||||
static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
HB_SIZE nRead;
|
||||
int i;
|
||||
|
||||
hb_fptDestroyGCdata( pGCtable );
|
||||
memset( &pGCtable->fptHeader, 0, sizeof( FPTHEADER ) );
|
||||
@@ -748,6 +753,8 @@ static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
sizeof( FPTHEADER ), 0 );
|
||||
if( nRead >= 512 && nRead != ( HB_SIZE ) FS_ERROR )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( pArea->bMemoType == DB_MEMO_SMT || pArea->bMemoType == DB_MEMO_DBT )
|
||||
pGCtable->ulNextBlock = HB_GET_LE_UINT32( pGCtable->fptHeader.nextBlock );
|
||||
else
|
||||
@@ -824,9 +831,7 @@ static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
}
|
||||
|
||||
if( pGCtable->pGCitems )
|
||||
{
|
||||
hb_fptSortGCitems( pGCtable );
|
||||
}
|
||||
|
||||
return HB_SUCCESS;
|
||||
}
|
||||
@@ -839,11 +844,12 @@ static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
{
|
||||
HB_ERRCODE errCode = HB_SUCCESS;
|
||||
HB_ULONG ulHdrSize = 512;
|
||||
int i, j;
|
||||
|
||||
if( pGCtable->bChanged > 0 )
|
||||
{
|
||||
HB_ULONG ulHdrSize = 512;
|
||||
int i, j;
|
||||
|
||||
if( pGCtable->bType == DB_MEMOVER_SIX )
|
||||
{
|
||||
HB_USHORT usItems = HB_MIN( pGCtable->usItems, pGCtable->usMaxItem );
|
||||
@@ -983,9 +989,8 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
|
||||
static HB_ULONG hb_fptGetMemoLen( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
{
|
||||
HB_ULONG ulBlock, ulSize, ulType;
|
||||
FPTBLOCK fptBlock;
|
||||
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemoLen(%p, %hu)", pArea, uiIndex ) );
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemoLen(%p, %hu)", ( void * ) pArea, uiIndex ) );
|
||||
|
||||
if( hb_dbfGetMemoData( ( DBFAREAP ) pArea, uiIndex - 1, &ulBlock, &ulSize,
|
||||
&ulType ) == HB_SUCCESS )
|
||||
@@ -996,6 +1001,7 @@ static HB_ULONG hb_fptGetMemoLen( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
pArea->bMemoType == DB_MEMO_FPT ) )
|
||||
{
|
||||
HB_FOFFSET fOffset = FPT_BLOCK_OFFSET( ulBlock );
|
||||
FPTBLOCK fptBlock;
|
||||
|
||||
if( pArea->bMemoType == DB_MEMO_DBT )
|
||||
{
|
||||
@@ -1032,9 +1038,8 @@ static HB_ULONG hb_fptGetMemoLen( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
static const char * hb_fptGetMemoType( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
{
|
||||
HB_ULONG ulBlock, ulSize, ulType;
|
||||
FPTBLOCK fptBlock;
|
||||
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemoType(%p, %hu)", pArea, uiIndex ) );
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemoType(%p, %hu)", ( void * ) pArea, uiIndex ) );
|
||||
|
||||
if( hb_dbfGetMemoData( ( DBFAREAP ) pArea, uiIndex - 1, &ulBlock, &ulSize,
|
||||
&ulType ) == HB_SUCCESS )
|
||||
@@ -1043,6 +1048,7 @@ static const char * hb_fptGetMemoType( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
{
|
||||
if( ulType == 0 && pArea->bMemoType == DB_MEMO_FPT )
|
||||
{
|
||||
FPTBLOCK fptBlock;
|
||||
if( hb_fileReadAt( pArea->pMemoFile, &fptBlock,
|
||||
sizeof( FPTBLOCK ), FPT_BLOCK_OFFSET( ulBlock ) ) !=
|
||||
sizeof( FPTBLOCK ) )
|
||||
@@ -1069,11 +1075,11 @@ static const char * hb_fptGetMemoType( FPTAREAP pArea, HB_USHORT uiIndex )
|
||||
return "M";
|
||||
case FPTIT_SIX_ARRAY:
|
||||
return "A";
|
||||
/*
|
||||
#if 0
|
||||
case FPTIT_SIX_BLOCK:
|
||||
case FPTIT_SIX_VREF:
|
||||
case FPTIT_SIX_MREF:
|
||||
*/
|
||||
#endif
|
||||
case FPTIT_FLEX_ARRAY:
|
||||
case FPTIT_FLEX_VOARR:
|
||||
return "A";
|
||||
@@ -1264,10 +1270,6 @@ static HB_ERRCODE hb_fptCountSMTDataLength( FPTAREAP pArea, HB_FOFFSET * pfOffse
|
||||
static void hb_fptStoreSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufPtr, int iTrans )
|
||||
{
|
||||
HB_ULONG ulLen, u;
|
||||
HB_MAXINT iVal;
|
||||
HB_LONG lVal;
|
||||
double dVal;
|
||||
int iWidth, iDec;
|
||||
|
||||
switch( hb_itemType( pItem ) )
|
||||
{
|
||||
@@ -1323,7 +1325,8 @@ static void hb_fptStoreSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufP
|
||||
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
iVal = hb_itemGetNInt( pItem );
|
||||
{
|
||||
HB_MAXINT iVal = hb_itemGetNInt( pItem );
|
||||
if( HB_LIM_INT32( iVal ) )
|
||||
{
|
||||
*( *bBufPtr )++ = SMT_IT_INT;
|
||||
@@ -1331,9 +1334,12 @@ static void hb_fptStoreSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufP
|
||||
*bBufPtr += 4;
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
}
|
||||
/* fallthrough */
|
||||
case HB_IT_DOUBLE:
|
||||
dVal = hb_itemGetND( pItem );
|
||||
{
|
||||
double dVal = hb_itemGetND( pItem );
|
||||
int iWidth, iDec;
|
||||
hb_itemGetNLen( pItem, &iWidth, &iDec );
|
||||
if( iDec )
|
||||
iWidth += iDec + 1;
|
||||
@@ -1343,15 +1349,17 @@ static void hb_fptStoreSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufP
|
||||
HB_PUT_LE_DOUBLE( *bBufPtr, dVal );
|
||||
*bBufPtr += 8;
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_IT_DATE:
|
||||
case HB_IT_TIMESTAMP:
|
||||
{
|
||||
HB_LONG lVal;
|
||||
*( *bBufPtr )++ = SMT_IT_DATE;
|
||||
lVal = hb_itemGetDL( pItem );
|
||||
HB_PUT_LE_UINT32( *bBufPtr, lVal );
|
||||
*bBufPtr += 4;
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_IT_LOGICAL:
|
||||
*( *bBufPtr )++ = SMT_IT_LOGICAL;
|
||||
*( *bBufPtr )++ = hb_itemGetL( pItem ) ? 1 : 0;
|
||||
@@ -1372,7 +1380,6 @@ static HB_ERRCODE hb_fptReadRawSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_FOFFS
|
||||
HB_ULONG ulLen, u;
|
||||
HB_BYTE buffer[ 10 ];
|
||||
char * pBuffer;
|
||||
int iWidth, iDec;
|
||||
|
||||
if( hb_fileReadAt( pArea->pMemoFile, buffer, 1, *pfOffset ) != 1 )
|
||||
return EDBF_READ;
|
||||
@@ -1436,6 +1443,8 @@ static HB_ERRCODE hb_fptReadRawSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_FOFFS
|
||||
break;
|
||||
|
||||
case SMT_IT_DOUBLE:
|
||||
{
|
||||
int iWidth, iDec;
|
||||
if( hb_fileReadAt( pArea->pMemoFile, buffer, 10, *pfOffset ) != 10 )
|
||||
return EDBF_READ;
|
||||
*pfOffset += 10;
|
||||
@@ -1445,7 +1454,7 @@ static HB_ERRCODE hb_fptReadRawSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_FOFFS
|
||||
iWidth -= iDec + 1;
|
||||
hb_itemPutNDLen( pItem, HB_GET_LE_DOUBLE( &buffer[ 2 ] ), iWidth, iDec );
|
||||
break;
|
||||
|
||||
}
|
||||
case SMT_IT_DATE:
|
||||
if( hb_fileReadAt( pArea->pMemoFile, buffer, 4, *pfOffset ) != 4 )
|
||||
return EDBF_READ;
|
||||
@@ -1477,12 +1486,12 @@ static HB_ERRCODE hb_fptReadRawSMTItem( FPTAREAP pArea, PHB_ITEM pItem, HB_FOFFS
|
||||
*/
|
||||
static HB_ERRCODE hb_fptReadSMTItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BYTE * bBufEnd, PHB_ITEM pItem, int iTrans )
|
||||
{
|
||||
HB_ULONG ulLen, u;
|
||||
HB_ERRCODE errCode = HB_SUCCESS;
|
||||
int iWidth, iDec;
|
||||
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 1 )
|
||||
{
|
||||
HB_ULONG ulLen, u;
|
||||
|
||||
switch( *( *pbMemoBuf )++ )
|
||||
{
|
||||
case SMT_IT_ARRAY:
|
||||
@@ -1552,6 +1561,8 @@ static HB_ERRCODE hb_fptReadSMTItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
break;
|
||||
|
||||
case SMT_IT_DOUBLE:
|
||||
{
|
||||
int iWidth, iDec;
|
||||
if( bBufEnd - ( *pbMemoBuf ) < 10 )
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
@@ -1564,7 +1575,7 @@ static HB_ERRCODE hb_fptReadSMTItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
hb_itemPutNDLen( pItem, HB_GET_LE_DOUBLE( *pbMemoBuf ), iWidth, iDec );
|
||||
*pbMemoBuf += 8;
|
||||
break;
|
||||
|
||||
}
|
||||
case SMT_IT_DATE:
|
||||
if( bBufEnd - ( *pbMemoBuf ) < 4 )
|
||||
{
|
||||
@@ -1595,9 +1606,7 @@ static HB_ERRCODE hb_fptReadSMTItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
|
||||
return errCode;
|
||||
}
|
||||
@@ -1669,9 +1678,6 @@ static HB_ULONG hb_fptCountSixItemLength( FPTAREAP pArea, PHB_ITEM pItem,
|
||||
static HB_ULONG hb_fptStoreSixItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufPtr, int iTrans )
|
||||
{
|
||||
HB_ULONG ulLen, u, ulSize;
|
||||
HB_MAXINT iVal;
|
||||
HB_LONG lVal;
|
||||
double dVal;
|
||||
int iWidth, iDec;
|
||||
|
||||
memset( *bBufPtr, '\0', SIX_ITEM_BUFSIZE );
|
||||
@@ -1696,7 +1702,8 @@ static HB_ULONG hb_fptStoreSixItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** b
|
||||
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
iVal = hb_itemGetNInt( pItem );
|
||||
{
|
||||
HB_MAXINT iVal = hb_itemGetNInt( pItem );
|
||||
hb_itemGetNLen( pItem, &iWidth, &iDec );
|
||||
if( HB_LIM_INT32( iVal ) )
|
||||
{
|
||||
@@ -1715,9 +1722,10 @@ static HB_ULONG hb_fptStoreSixItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** b
|
||||
*bBufPtr += SIX_ITEM_BUFSIZE;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_IT_DOUBLE:
|
||||
dVal = hb_itemGetND( pItem );
|
||||
{
|
||||
double dVal = hb_itemGetND( pItem );
|
||||
hb_itemGetNLen( pItem, &iWidth, &iDec );
|
||||
HB_PUT_LE_UINT16( &( *bBufPtr )[ 0 ], FPTIT_SIX_DNUM );
|
||||
HB_PUT_LE_UINT16( &( *bBufPtr )[ 2 ], iWidth );
|
||||
@@ -1725,15 +1733,16 @@ static HB_ULONG hb_fptStoreSixItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** b
|
||||
HB_PUT_LE_DOUBLE( &( *bBufPtr )[ 6 ], dVal );
|
||||
*bBufPtr += SIX_ITEM_BUFSIZE;
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_IT_DATE:
|
||||
case HB_IT_TIMESTAMP:
|
||||
lVal = hb_itemGetDL( pItem );
|
||||
{
|
||||
HB_LONG lVal = hb_itemGetDL( pItem );
|
||||
HB_PUT_LE_UINT16( &( *bBufPtr )[ 0 ], FPTIT_SIX_LDATE );
|
||||
HB_PUT_LE_UINT32( &( *bBufPtr )[ 6 ], lVal );
|
||||
*bBufPtr += SIX_ITEM_BUFSIZE;
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_IT_LOGICAL:
|
||||
HB_PUT_LE_UINT16( &( *bBufPtr )[ 0 ], FPTIT_SIX_LOG );
|
||||
( *bBufPtr )[ 6 ] = hb_itemGetL( pItem ) ? 1 : 0;
|
||||
@@ -1789,14 +1798,13 @@ static HB_ULONG hb_fptStoreSixItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** b
|
||||
*/
|
||||
static HB_ERRCODE hb_fptReadSixItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BYTE * bBufEnd, PHB_ITEM pItem, int iTrans )
|
||||
{
|
||||
HB_USHORT usType;
|
||||
HB_ULONG ulLen, u;
|
||||
HB_ERRCODE errCode = HB_SUCCESS;
|
||||
|
||||
ulLen = SIX_ITEM_BUFSIZE;
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= ( HB_LONG ) ulLen )
|
||||
{
|
||||
usType = HB_GET_LE_UINT16( &( *pbMemoBuf )[ 0 ] );
|
||||
HB_USHORT usType = HB_GET_LE_UINT16( &( *pbMemoBuf )[ 0 ] );
|
||||
switch( usType )
|
||||
{
|
||||
case FPTIT_SIX_LNUM:
|
||||
@@ -1846,15 +1854,14 @@ static HB_ERRCODE hb_fptReadSixItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
|
||||
break;
|
||||
/*
|
||||
#if 0
|
||||
case FPTIT_SIX_BLOCK:
|
||||
case FPTIT_SIX_VREF:
|
||||
case FPTIT_SIX_MREF:
|
||||
*/
|
||||
#endif
|
||||
case FPTIT_SIX_ARRAY:
|
||||
ulLen = HB_GET_LE_UINT32( &( *pbMemoBuf )[ 2 ] );
|
||||
if( pArea->uiMemoVersion == DB_MEMOVER_SIX )
|
||||
@@ -1868,9 +1875,7 @@ static HB_ERRCODE hb_fptReadSixItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
errCode = hb_fptReadSixItem( pArea, pbMemoBuf, bBufEnd,
|
||||
hb_arrayGetItemPtr( pItem, u ), iTrans );
|
||||
if( errCode != HB_SUCCESS )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ulLen = 0;
|
||||
break;
|
||||
@@ -1887,9 +1892,7 @@ static HB_ERRCODE hb_fptReadSixItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_BY
|
||||
*pbMemoBuf += ulLen;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
|
||||
return errCode;
|
||||
}
|
||||
@@ -1961,9 +1964,6 @@ static HB_ULONG hb_fptCountFlexItemLength( FPTAREAP pArea, PHB_ITEM pItem,
|
||||
static void hb_fptStoreFlexItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBufPtr, int iTrans )
|
||||
{
|
||||
HB_ULONG ulLen, u;
|
||||
HB_MAXINT iVal;
|
||||
HB_LONG lVal;
|
||||
double dVal;
|
||||
int iWidth, iDec;
|
||||
|
||||
switch( hb_itemType( pItem ) )
|
||||
@@ -2016,14 +2016,18 @@ static void hb_fptStoreFlexItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBuf
|
||||
break;
|
||||
case HB_IT_DATE:
|
||||
case HB_IT_TIMESTAMP:
|
||||
{
|
||||
HB_LONG lVal;
|
||||
*( *bBufPtr )++ = FPTIT_FLEXAR_DATEJ;
|
||||
lVal = hb_itemGetDL( pItem );
|
||||
HB_PUT_LE_UINT32( *bBufPtr, lVal );
|
||||
*bBufPtr += 4;
|
||||
break;
|
||||
}
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
iVal = hb_itemGetNInt( pItem );
|
||||
{
|
||||
HB_MAXINT iVal = hb_itemGetNInt( pItem );
|
||||
hb_itemGetNLen( pItem, &iWidth, &iDec );
|
||||
if( HB_LIM_INT8( iVal ) )
|
||||
{
|
||||
@@ -2054,8 +2058,10 @@ static void hb_fptStoreFlexItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBuf
|
||||
*bBufPtr += 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HB_IT_DOUBLE:
|
||||
dVal = hb_itemGetND( pItem );
|
||||
{
|
||||
double dVal = hb_itemGetND( pItem );
|
||||
hb_itemGetNLen( pItem, &iWidth, &iDec );
|
||||
if( iDec )
|
||||
iWidth += iDec + 1;
|
||||
@@ -2065,6 +2071,7 @@ static void hb_fptStoreFlexItem( FPTAREAP pArea, PHB_ITEM pItem, HB_BYTE ** bBuf
|
||||
HB_PUT_LE_DOUBLE( *bBufPtr, dVal );
|
||||
*bBufPtr += 8;
|
||||
break;
|
||||
}
|
||||
case HB_IT_LOGICAL:
|
||||
*( *bBufPtr )++ = hb_itemGetL( pItem ) ?
|
||||
FPTIT_FLEXAR_TRUE : FPTIT_FLEXAR_FALSE;
|
||||
@@ -2085,17 +2092,12 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
HB_ERRCODE errCode = HB_SUCCESS;
|
||||
|
||||
if( bRoot )
|
||||
{
|
||||
usType = FPTIT_FLEXAR_ARAY;
|
||||
}
|
||||
else if( bBufEnd - ( *pbMemoBuf ) > 0 )
|
||||
{
|
||||
usType = *( *pbMemoBuf )++;
|
||||
}
|
||||
else
|
||||
{
|
||||
return EDBF_CORRUPT;
|
||||
}
|
||||
|
||||
switch( usType )
|
||||
{
|
||||
case FPTIT_FLEXAR_NIL:
|
||||
@@ -2109,13 +2111,9 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
break;
|
||||
case FPTIT_FLEXAR_LOGIC:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 1 )
|
||||
{
|
||||
hb_itemPutL( pItem, *( *pbMemoBuf )++ != 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_DATEJ:
|
||||
case FPTIT_FLEXAR_DATEX:
|
||||
@@ -2125,19 +2123,13 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_CHAR:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 1 )
|
||||
{
|
||||
hb_itemPutNI( pItem, ( signed char ) *( *pbMemoBuf )++ );
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_CHAR1:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 2 )
|
||||
@@ -2146,9 +2138,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_CHAR2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 3 )
|
||||
@@ -2160,25 +2150,17 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( signed char ) **pbMemoBuf, iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNILen( pItem, ( signed char ) **pbMemoBuf, iLen );
|
||||
}
|
||||
*pbMemoBuf += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_UCHAR:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 1 )
|
||||
{
|
||||
hb_itemPutNI( pItem, ( unsigned char ) *( *pbMemoBuf )++ );
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_UCHAR1:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 2 )
|
||||
@@ -2187,9 +2169,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_UCHAR2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 3 )
|
||||
@@ -2201,15 +2181,11 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( unsigned char ) **pbMemoBuf, iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNILen( pItem, ( unsigned char ) **pbMemoBuf, iLen );
|
||||
}
|
||||
*pbMemoBuf += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_SHORT:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 2 )
|
||||
@@ -2218,9 +2194,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_SHORT1:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 3 )
|
||||
@@ -2230,9 +2204,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_SHORT2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 4 )
|
||||
@@ -2244,15 +2216,11 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( HB_SHORT ) HB_GET_LE_UINT16( *pbMemoBuf ), iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNILen( pItem, ( HB_SHORT ) HB_GET_LE_UINT16( *pbMemoBuf ), iLen );
|
||||
}
|
||||
*pbMemoBuf += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_USHORT:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 2 )
|
||||
@@ -2261,9 +2229,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_USHORT1:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 3 )
|
||||
@@ -2273,9 +2239,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_USHORT2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 4 )
|
||||
@@ -2287,15 +2251,11 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( HB_USHORT ) HB_GET_LE_UINT16( *pbMemoBuf ), iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNIntLen( pItem, ( HB_USHORT ) HB_GET_LE_UINT16( *pbMemoBuf ), iLen );
|
||||
}
|
||||
*pbMemoBuf += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_LONG:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 4 )
|
||||
@@ -2304,9 +2264,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_LONG1:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 5 )
|
||||
@@ -2316,9 +2274,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_LONG2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 6 )
|
||||
@@ -2330,15 +2286,11 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( HB_LONG ) HB_GET_LE_UINT32( *pbMemoBuf ), iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNLLen( pItem, ( HB_LONG ) HB_GET_LE_UINT32( *pbMemoBuf ), iLen );
|
||||
}
|
||||
*pbMemoBuf += 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_ULONG2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 6 )
|
||||
@@ -2350,15 +2302,11 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutNDLen( pItem, ( HB_ULONG ) HB_GET_LE_UINT32( *pbMemoBuf ), iLen, iDec );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemPutNIntLen( pItem, ( HB_ULONG ) HB_GET_LE_UINT32( *pbMemoBuf ), iLen );
|
||||
}
|
||||
*pbMemoBuf += 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_DOUBLE:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 8 )
|
||||
@@ -2367,9 +2315,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_DOUBLE2:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 10 )
|
||||
@@ -2381,9 +2327,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_LDOUBLE:
|
||||
if( bBufEnd - ( *pbMemoBuf ) >= 10 )
|
||||
@@ -2394,9 +2338,7 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
*pbMemoBuf += 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
case FPTIT_FLEXAR_NUL:
|
||||
hb_itemPutCL( pItem, NULL, 0 );
|
||||
@@ -2427,14 +2369,10 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
hb_itemPutCL( pItem, pszStr, ulLen );
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
|
||||
case FPTIT_FLEXAR_ARAY:
|
||||
@@ -2456,17 +2394,13 @@ static HB_ERRCODE hb_fptReadFlexItem( FPTAREAP pArea, HB_BYTE ** pbMemoBuf, HB_B
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errCode = EDBF_CORRUPT;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* fprintf( stderr, "Uknown FLEX array item: 0x%x = %d\n", usType, usType ); fflush( stderr ); */
|
||||
/* fprintf( stderr, "Unknown FLEX array item: 0x%x = %d\n", usType, usType ); fflush( stderr ); */
|
||||
errCode = EDBF_CORRUPT;
|
||||
hb_itemClear( pItem );
|
||||
break;
|
||||
@@ -2661,7 +2595,7 @@ static HB_ERRCODE hb_fptGetMemo( FPTAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pIt
|
||||
HB_BYTE * bMemoBuf;
|
||||
FPTBLOCK fptBlock;
|
||||
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemo(%p, %hu, %p, %p, %lu, %lu, %d)", pArea, uiIndex, pItem, pFile, ulStart, ulCount, iTrans ) );
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptGetMemo(%p, %hu, %p, %p, %lu, %lu, %d)", ( void * ) pArea, uiIndex, ( void * ) pItem, ( void * ) pFile, ulStart, ulCount, iTrans ) );
|
||||
|
||||
if( uiIndex )
|
||||
{
|
||||
@@ -2824,11 +2758,11 @@ static HB_ERRCODE hb_fptGetMemo( FPTAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pIt
|
||||
case FPTIT_SIX_LOG:
|
||||
case FPTIT_SIX_CHAR:
|
||||
case FPTIT_SIX_ARRAY:
|
||||
/*
|
||||
#if 0
|
||||
case FPTIT_SIX_BLOCK:
|
||||
case FPTIT_SIX_VREF:
|
||||
case FPTIT_SIX_MREF:
|
||||
*/
|
||||
#endif
|
||||
bMemoBuf = ( HB_BYTE * ) pBuffer;
|
||||
errCode = hb_fptReadSixItem( pArea, &bMemoBuf, bMemoBuf + ulSize, pItem, iTrans );
|
||||
break;
|
||||
@@ -2929,7 +2863,7 @@ static HB_ERRCODE hb_fptWriteMemo( FPTAREAP pArea, HB_ULONG ulBlock, HB_ULONG ul
|
||||
HB_BOOL bWrite;
|
||||
|
||||
HB_TRACE( HB_TR_DEBUG, ( "hb_fptWriteMemo(%p, %lu, %lu, %p, %p, %lu, %lu, %p)",
|
||||
pArea, ulBlock, ulSize, bBufPtr, pFile, ulType, ulLen, pulStoredBlock ) );
|
||||
( void * ) pArea, ulBlock, ulSize, ( const void * ) bBufPtr, ( void * ) pFile, ulType, ulLen, ( void * ) pulStoredBlock ) );
|
||||
|
||||
bWrite = ( ulLen != 0 || ( pArea->bMemoType == DB_MEMO_FPT &&
|
||||
ulType != FPTIT_TEXT && ulType != FPTIT_BINARY &&
|
||||
|
||||
Reference in New Issue
Block a user