2009-08-25 16:49 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/config/linux/sunpro.mk
    ! fixed dynamic library creation - @<filename> is not supported by
      SunPRO C compiler, because it's ported only to POSIX environments
      then we can simply pass file list as shell arguments

  * harbour/include/hbrdddbf.h
  * harbour/source/rdd/dbf1.c
  * harbour/source/rdd/dbffpt/dbffpt1.c
    * cleaned memo block size decoding.

  * harbour/include/hbvmpub.h
    + added new internal macro HB_ITEM_PUT_LONGRAW()
  * harbour/source/vm/hvm.c
  * harbour/source/vm/itemapi.c
    * use HB_ITEM_PUT_LONGRAW()
This commit is contained in:
Przemyslaw Czerpak
2009-08-25 14:49:44 +00:00
parent 6b019f5134
commit b6b631464c
8 changed files with 115 additions and 102 deletions

View File

@@ -17,6 +17,23 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-08-25 16:49 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/config/linux/sunpro.mk
! fixed dynamic library creation - @<filename> is not supported by
SunPRO C compiler, because it's ported only to POSIX environments
then we can simply pass file list as shell arguments
* harbour/include/hbrdddbf.h
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* cleaned memo block size decoding.
* harbour/include/hbvmpub.h
+ added new internal macro HB_ITEM_PUT_LONGRAW()
* harbour/source/vm/hvm.c
* harbour/source/vm/itemapi.c
* use HB_ITEM_PUT_LONGRAW()
2009-08-25 15:13 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* INSTALL
+ Added DJGPP cross-builds to support matrix.

View File

@@ -113,17 +113,6 @@ endif
DY_OUT := -o$(subst x,x, )
DLIBS :=
# NOTE: The empty line directly before 'endef' HAVE TO exist!
define dyn_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp
endef
define create_dynlib
$(if $(wildcard __dyn__.tmp),@$(RM) __dyn__.tmp,)
$(foreach file,$^,$(dyn_object))
$(DY) $(DFLAGS) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ @__dyn__.tmp
endef
DY_RULE = $(create_dynlib)
DY_RULE = $(DY) $(DFLAGS) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ $^
include $(TOP)$(ROOT)config/rules.mk

View File

@@ -141,7 +141,7 @@ typedef struct _DBFDATA
BYTE bMemoType; /* DB_MEMO_FPT */
BYTE bMemoExtType; /* DB_MEMOVER_FLEX */
USHORT uiDirtyRead; /* HB_IDXREAD_CLEANMASK */
USHORT uiMemoBlockSize; /* 0 */
ULONG ulMemoBlockSize; /* 0 */
BOOL fSortRecNo;
BOOL fMultiKey;
@@ -183,8 +183,8 @@ typedef struct _DBFAREA
char * szMemoFileName; /* Name of memo file */
USHORT uiHeaderLen; /* Size of header */
USHORT uiRecordLen; /* Size of record */
USHORT uiMemoBlockSize; /* Size of memo block */
USHORT uiNewBlockSize; /* Size of new memo block */
ULONG ulMemoBlockSize; /* Size of memo block */
ULONG ulNewBlockSize; /* Size of new memo block */
USHORT uiMemoVersion; /* MEMO file version */
USHORT uiDirtyRead; /* Index dirty read bit filed */
USHORT uiNullOffset; /* Offset to _NullFlags filed */

View File

@@ -97,6 +97,22 @@ struct _HB_SYMB;
} \
} while( 0 )
# if HB_INT_MAX >= LONG_MAX
# define HB_ITEM_PUT_LONGRAW( p, v ) \
do { \
(p)->type = HB_IT_INTEGER; \
(p)->item.asInteger.value = ( int ) (v); \
(p)->item.asInteger.length = HB_INT_EXPLENGTH( v ); \
} while( 0 )
# else
# define HB_ITEM_PUT_LONGRAW( p, v ) \
do { \
(p)->type = HB_IT_LONG; \
(p)->item.asLong.value = (v); \
(p)->item.asLong.length = HB_LONG_EXPLENGTH( v ); \
} while( 0 )
# endif
# define HB_ITEM_GET_NUMDBLRAW( p ) ( HB_IS_INTEGER( p ) ? \
( double ) (p)->item.asInteger.value : \
( HB_IS_LONG( p ) ? \

View File

@@ -3208,7 +3208,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo )
{
pArea->bMemoType = DB_MEMO_NONE;
}
pArea->uiMemoBlockSize = 0;
pArea->ulMemoBlockSize = 0;
#ifndef HB_CDP_SUPPORT_OFF
if( pCreateInfo->cdpId )

View File

@@ -83,7 +83,7 @@
#endif
#define FPT_BLOCK_OFFSET( b ) ( ( HB_FOFFSET ) ( b ) * \
( HB_FOFFSET ) pArea->uiMemoBlockSize )
( HB_FOFFSET ) pArea->ulMemoBlockSize )
static USHORT s_uiRddIdBLOB = ( USHORT ) -1;
static USHORT s_uiRddIdFPT = ( USHORT ) -1;
@@ -622,11 +622,11 @@ static HB_ERRCODE hb_fptWriteGCitems( FPTAREAP pArea, LPMEMOGCTABLE pGCtable, US
* which can leave 8 or less dummy bytes so such problem
* does not exists. [druzus]
*/
pGCtable->pGCitems[i].ulSize * pArea->uiMemoBlockSize >=
pGCtable->pGCitems[i].ulSize * pArea->ulMemoBlockSize >=
sizeof( FPTBLOCK ) )
{
HB_PUT_BE_UINT32( fptBlock.type, FPTIT_FLEX_UNUSED );
HB_PUT_BE_UINT32( fptBlock.size, pArea->uiMemoBlockSize *
HB_PUT_BE_UINT32( fptBlock.size, pArea->ulMemoBlockSize *
pGCtable->pGCitems[i].ulSize - sizeof( FPTBLOCK ) );
if( hb_fileWriteAt( pArea->pMemoFile, &fptBlock,
sizeof( FPTBLOCK ),
@@ -675,7 +675,7 @@ static HB_ERRCODE hb_fptGCfreeBlock( FPTAREAP pArea, LPMEMOGCTABLE pGCtable,
}
}
ulSize = ( ulByteSize + pArea->uiMemoBlockSize - 1 ) / pArea->uiMemoBlockSize;
ulSize = ( ulByteSize + pArea->ulMemoBlockSize - 1 ) / pArea->ulMemoBlockSize;
if( ulSize == 0 )
{
@@ -765,23 +765,23 @@ static HB_ERRCODE hb_fptGCgetFreeBlock( FPTAREAP pArea, LPMEMOGCTABLE pGCtable,
if( pArea->bMemoType == DB_MEMO_SMT || fRaw )
{
ulSize = ( ulByteSize + pArea->uiMemoBlockSize - 1 ) /
pArea->uiMemoBlockSize;
ulSize = ( ulByteSize + pArea->ulMemoBlockSize - 1 ) /
pArea->ulMemoBlockSize;
}
else if( pArea->bMemoType == DB_MEMO_FPT )
{
ulSize = ( ulByteSize + sizeof( FPTBLOCK ) + pArea->uiMemoBlockSize - 1 ) /
pArea->uiMemoBlockSize;
ulSize = ( ulByteSize + sizeof( FPTBLOCK ) + pArea->ulMemoBlockSize - 1 ) /
pArea->ulMemoBlockSize;
}
else if( pArea->bMemoType == DB_MEMO_DBT )
{
ulSize = ( ulByteSize + pArea->uiMemoBlockSize ) /
pArea->uiMemoBlockSize;
ulSize = ( ulByteSize + pArea->ulMemoBlockSize ) /
pArea->ulMemoBlockSize;
}
else
{
ulSize = ( ulByteSize + pArea->uiMemoBlockSize - 1 ) /
pArea->uiMemoBlockSize;
ulSize = ( ulByteSize + pArea->ulMemoBlockSize - 1 ) /
pArea->ulMemoBlockSize;
}
for( i = 0; i < pGCtable->usItems; i++ )
@@ -920,9 +920,9 @@ static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
for( i = 0; i < pGCtable->usItems; i++ )
{
pGCtable->pGCitems[i].ulOffset = HB_GET_LE_UINT32( &bPageBuf[ i * 8 + 2 ] ) /
pArea->uiMemoBlockSize;
pArea->ulMemoBlockSize;
pGCtable->pGCitems[i].ulSize = HB_GET_LE_UINT32( &bPageBuf[ i * 8 + 6 ] ) /
pArea->uiMemoBlockSize;
pArea->ulMemoBlockSize;
pGCtable->pGCitems[i].fChanged = FALSE;
}
hb_xfree( bPageBuf );
@@ -971,8 +971,8 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
if( pGCtable->usItems == 0 && pGCtable->ulDirPage )
{
ULONG ulOffset = pGCtable->ulDirPage;
ULONG ulSize = ( pGCtable->ulSize + pArea->uiMemoBlockSize - 1 ) /
pArea->uiMemoBlockSize;
ULONG ulSize = ( pGCtable->ulSize + pArea->ulMemoBlockSize - 1 ) /
pArea->ulMemoBlockSize;
if( pGCtable->ulRevPage )
{
ulSize <<= 1;
@@ -981,7 +981,7 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
ulOffset = pGCtable->ulRevPage;
}
}
ulOffset /= pArea->uiMemoBlockSize;
ulOffset /= pArea->ulMemoBlockSize;
if( ulOffset + ulSize == pGCtable->ulNextBlock )
{
pGCtable->ulDirPage = pGCtable->ulRevPage = 0;
@@ -995,10 +995,10 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
&pGCtable->ulDirPage, pGCtable->ulSize, FALSE );
if( errCode == HB_SUCCESS )
{
pGCtable->ulDirPage *= pArea->uiMemoBlockSize;
pGCtable->ulDirPage *= pArea->ulMemoBlockSize;
errCode = hb_fptGCgetFreeBlock( pArea, pGCtable,
&pGCtable->ulRevPage, pGCtable->ulSize, FALSE );
pGCtable->ulRevPage *= pArea->uiMemoBlockSize;
pGCtable->ulRevPage *= pArea->ulMemoBlockSize;
}
pGCtable->bChanged |= 2;
}
@@ -1017,9 +1017,9 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
for( i = j; i < pGCtable->usItems; i++ )
{
HB_PUT_LE_UINT32( &bPageBuf[ ( i - j ) * 8 + 2 ],
pGCtable->pGCitems[i].ulOffset * pArea->uiMemoBlockSize );
pGCtable->pGCitems[i].ulOffset * pArea->ulMemoBlockSize );
HB_PUT_LE_UINT32( &bPageBuf[ ( i - j ) * 8 + 6 ],
pGCtable->pGCitems[i].ulSize * pArea->uiMemoBlockSize );
pGCtable->pGCitems[i].ulSize * pArea->ulMemoBlockSize );
}
if( hb_fileWriteAt( pArea->pMemoFile, &fptBlock,
sizeof( FPTBLOCK ), pGCtable->ulDirPage ) !=
@@ -1035,9 +1035,9 @@ static HB_ERRCODE hb_fptWriteGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable )
for( i = j; i < pGCtable->usItems; i++ )
{
HB_PUT_LE_UINT32( &bPageBuf[ ( i - j ) * 8 + 2 ],
( ( USHORT ) pGCtable->pGCitems[i].ulSize * pArea->uiMemoBlockSize ) );
( ( USHORT ) pGCtable->pGCitems[i].ulSize * pArea->ulMemoBlockSize ) );
HB_PUT_LE_UINT32( &bPageBuf[ ( i - j ) * 8 + 6 ],
pGCtable->pGCitems[i].ulOffset * pArea->uiMemoBlockSize );
pGCtable->pGCitems[i].ulOffset * pArea->ulMemoBlockSize );
}
if( hb_fileWriteAt( pArea->pMemoFile, &fptBlock,
sizeof( FPTBLOCK ), pGCtable->ulRevPage ) !=
@@ -2946,10 +2946,10 @@ static HB_ERRCODE hb_fptWriteMemo( FPTAREAP pArea, ULONG ulBlock, ULONG ulSize,
hb_fileWriteAt( pArea->pMemoFile, "\x1A\x1A", 2, fOffset );
}
else if( pArea->uiMemoVersion == DB_MEMOVER_FLEX &&
( ulLen + sizeof( FPTBLOCK ) ) % pArea->uiMemoBlockSize != 0 )
( ulLen + sizeof( FPTBLOCK ) ) % pArea->ulMemoBlockSize != 0 )
{
ULONG ulBlocks = ( ulLen + sizeof( FPTBLOCK ) + pArea->uiMemoBlockSize - 1 ) /
pArea->uiMemoBlockSize;
ULONG ulBlocks = ( ulLen + sizeof( FPTBLOCK ) + pArea->ulMemoBlockSize - 1 ) /
pArea->ulMemoBlockSize;
hb_fileWriteAt( pArea->pMemoFile, "\xAF", 1,
FPT_BLOCK_OFFSET( *pulStoredBlock + ulBlocks ) - 1 );
}
@@ -3907,7 +3907,7 @@ static HB_ERRCODE hb_fptCreateMemFile( FPTAREAP pArea, LPDBOPENINFO pCreateInfo
else
pArea->uiMemoVersion = DB_MEMOVER_STD;
}
if( !pArea->uiMemoBlockSize )
if( !pArea->ulMemoBlockSize )
{
pItem = hb_itemPutNI( pItem, 0 );
if( SELF_INFO( ( AREAP ) pArea, DBI_MEMOBLOCKSIZE, pItem ) != HB_SUCCESS )
@@ -3915,7 +3915,7 @@ static HB_ERRCODE hb_fptCreateMemFile( FPTAREAP pArea, LPDBOPENINFO pCreateInfo
hb_itemRelease( pItem );
return HB_FAILURE;
}
pArea->uiMemoBlockSize = hb_itemGetNI( pItem );
pArea->ulMemoBlockSize = hb_itemGetNL( pItem );
}
if( ! pArea->fTemporary )
@@ -3995,25 +3995,25 @@ static HB_ERRCODE hb_fptCreateMemFile( FPTAREAP pArea, LPDBOPENINFO pCreateInfo
ulSize = sizeof( FPTHEADER );
if( pArea->area.rddID == s_uiRddIdBLOB )
{
HB_PUT_LE_UINT16( fptHeader.flexSize, pArea->uiMemoBlockSize );
HB_PUT_LE_UINT16( fptHeader.flexSize, ( UINT16 ) pArea->ulMemoBlockSize );
}
}
}
ulNextBlock = ( ulSize + pArea->uiMemoBlockSize - 1 ) / pArea->uiMemoBlockSize;
ulNextBlock = ( ulSize + pArea->ulMemoBlockSize - 1 ) / pArea->ulMemoBlockSize;
if( pArea->bMemoType == DB_MEMO_SMT || pArea->bMemoType == DB_MEMO_DBT )
{
HB_PUT_LE_UINT32( fptHeader.nextBlock, ulNextBlock );
HB_PUT_LE_UINT32( fptHeader.blockSize, ( UINT32 ) pArea->uiMemoBlockSize );
HB_PUT_LE_UINT32( fptHeader.blockSize, ( UINT32 ) pArea->ulMemoBlockSize );
}
else
{
HB_PUT_BE_UINT32( fptHeader.nextBlock, ulNextBlock );
HB_PUT_BE_UINT32( fptHeader.blockSize, ( UINT32 ) pArea->uiMemoBlockSize );
HB_PUT_BE_UINT32( fptHeader.blockSize, ( UINT32 ) pArea->ulMemoBlockSize );
}
if( hb_fileWriteAt( pArea->pMemoFile, &fptHeader, ulSize, 0 ) != ulSize )
return HB_FAILURE;
ulLen = ulNextBlock * pArea->uiMemoBlockSize - ulSize;
ulLen = ulNextBlock * pArea->ulMemoBlockSize - ulSize;
if( ulLen > ulSize )
{
memset( &fptHeader, 0, sizeof( FPTHEADER ) );
@@ -4171,7 +4171,7 @@ static HB_ERRCODE hb_fptOpenMemFile( FPTAREAP pArea, LPDBOPENINFO pOpenInfo )
if( pArea->bMemoType == DB_MEMO_DBT )
{
pArea->uiMemoBlockSize = DBT_DEFBLOCKSIZE;
pArea->ulMemoBlockSize = DBT_DEFBLOCKSIZE;
}
else
{
@@ -4184,9 +4184,15 @@ static HB_ERRCODE hb_fptOpenMemFile( FPTAREAP pArea, LPDBOPENINFO pOpenInfo )
{
pArea->uiMemoVersion = DB_MEMOVER_STD;
if( pArea->bMemoType == DB_MEMO_SMT )
pArea->uiMemoBlockSize = ( USHORT ) HB_GET_LE_UINT32( fptHeader.blockSize );
pArea->ulMemoBlockSize = HB_GET_LE_UINT32( fptHeader.blockSize );
else
pArea->uiMemoBlockSize = ( USHORT ) HB_GET_BE_UINT32( fptHeader.blockSize );
pArea->ulMemoBlockSize = HB_GET_BE_UINT32( fptHeader.blockSize );
/* hack for some buggy 3-rd part memo code implementations */
if( pArea->ulMemoBlockSize > 0x10000 &&
( pArea->ulMemoBlockSize & 0xFFFF) != 0 )
{
pArea->ulMemoBlockSize &= 0xFFFF;
}
/* Check for compatibility with SIX memo headers */
if( memcmp( fptHeader.signature1, "SIxMemo", 7 ) == 0 )
{
@@ -4203,10 +4209,10 @@ static HB_ERRCODE hb_fptOpenMemFile( FPTAREAP pArea, LPDBOPENINFO pOpenInfo )
{
USHORT usSize = HB_GET_LE_UINT16( fptHeader.flexSize );
pArea->uiMemoVersion = DB_MEMOVER_FLEX;
if( usSize != 0 && ( pArea->uiMemoBlockSize == 0 ||
if( usSize != 0 && ( pArea->ulMemoBlockSize == 0 ||
pArea->area.rddID == s_uiRddIdBLOB ) )
{
pArea->uiMemoBlockSize = usSize;
pArea->ulMemoBlockSize = usSize;
}
}
}
@@ -4214,7 +4220,7 @@ static HB_ERRCODE hb_fptOpenMemFile( FPTAREAP pArea, LPDBOPENINFO pOpenInfo )
}
}
if( pArea->uiMemoBlockSize == 0 )
if( pArea->ulMemoBlockSize == 0 )
{
hb_memoErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT,
( char * ) pArea->szMemoFileName, 0, 0 );
@@ -4398,10 +4404,10 @@ static HB_ERRCODE hb_fptDoPackRec( FPTAREAP pArea )
{
from = FPT_BLOCK_OFFSET( ulBlock );
pos = hb_fileSize( pArea->pMemoTmpFile );
ulBlock = ( ULONG ) ( ( pos + pArea->uiNewBlockSize - 1 ) /
pArea->uiNewBlockSize );
ulBlock = ( ULONG ) ( ( pos + pArea->ulNewBlockSize - 1 ) /
pArea->ulNewBlockSize );
pos = ( HB_FOFFSET ) ulBlock *
( HB_FOFFSET ) pArea->uiNewBlockSize;
( HB_FOFFSET ) pArea->ulNewBlockSize;
errCode = hb_fptCopyToFile( pArea->pMemoFile, from,
pArea->pMemoTmpFile, pos, ulSize );
}
@@ -4456,10 +4462,10 @@ static HB_ERRCODE hb_fptDoPackRec( FPTAREAP pArea )
{
from = FPT_BLOCK_OFFSET( ulBlock );
pos = hb_fileSize( pArea->pMemoTmpFile );
ulBlock = ( ULONG ) ( ( pos + pArea->uiNewBlockSize - 1 ) /
pArea->uiNewBlockSize );
ulBlock = ( ULONG ) ( ( pos + pArea->ulNewBlockSize - 1 ) /
pArea->ulNewBlockSize );
pos = ( HB_FOFFSET ) ulBlock *
( HB_FOFFSET ) pArea->uiNewBlockSize;
( HB_FOFFSET ) pArea->ulNewBlockSize;
errCode = hb_fptCopyToFile( pArea->pMemoFile, from,
pArea->pMemoTmpFile, pos, ulSize );
if( errCode == HB_SUCCESS )
@@ -4497,19 +4503,19 @@ static HB_ERRCODE hb_fptDoPack( FPTAREAP pArea, USHORT uiBlockSize,
errCode = SELF_RECCOUNT( ( AREAP ) pArea, &ulRecords );
if( errCode == HB_SUCCESS && ulRecords )
{
pArea->uiNewBlockSize = uiBlockSize && pArea->bMemoType != DB_MEMO_DBT
? uiBlockSize : pArea->uiMemoBlockSize;
pArea->ulNewBlockSize = uiBlockSize && pArea->bMemoType != DB_MEMO_DBT
? uiBlockSize : pArea->ulMemoBlockSize;
pArea->pMemoTmpFile = hb_fileCreateTemp( NULL, NULL, FC_NORMAL, szFile );
if( pArea->pMemoTmpFile )
{
USHORT uiMemoBlockSize = pArea->uiMemoBlockSize;
USHORT ulMemoBlockSize = pArea->ulMemoBlockSize;
PHB_FILE pFile = pArea->pMemoFile;
pArea->uiMemoBlockSize = pArea->uiNewBlockSize;
pArea->ulMemoBlockSize = pArea->ulNewBlockSize;
pArea->pMemoFile = pArea->pMemoTmpFile;
errCode = SELF_CREATEMEMFILE( ( AREAP ) pArea, NULL );
pArea->pMemoFile = pFile;
pArea->uiMemoBlockSize = uiMemoBlockSize;
pArea->ulMemoBlockSize = ulMemoBlockSize;
if( errCode == HB_SUCCESS )
{
if( pEvalBlock )
@@ -4560,8 +4566,8 @@ static HB_ERRCODE hb_fptDoPack( FPTAREAP pArea, USHORT uiBlockSize,
ULONG ulNextBlock;
BYTE buffer[4];
ulNextBlock = ( ULONG ) ( ( size + pArea->uiNewBlockSize - 1 ) /
pArea->uiNewBlockSize );
ulNextBlock = ( ULONG ) ( ( size + pArea->ulNewBlockSize - 1 ) /
pArea->ulNewBlockSize );
if( pArea->bMemoType == DB_MEMO_SMT ||
pArea->bMemoType == DB_MEMO_DBT )
HB_PUT_LE_UINT32( buffer, ulNextBlock );
@@ -4571,7 +4577,7 @@ static HB_ERRCODE hb_fptDoPack( FPTAREAP pArea, USHORT uiBlockSize,
errCode = hb_fptCopyToFile( pArea->pMemoTmpFile, 0,
pArea->pMemoFile, 0, size );
hb_fileTruncAt( pArea->pMemoFile, size );
pArea->uiMemoBlockSize = pArea->uiNewBlockSize;
pArea->ulMemoBlockSize = pArea->ulNewBlockSize;
if( errCode != HB_SUCCESS )
{
hb_memoErrorRT( pArea, 0, errCode, errCode == EDBF_READ ?
@@ -4642,7 +4648,7 @@ static HB_ERRCODE hb_fptPack( FPTAREAP pArea )
HB_ERRCODE errCode;
PHB_FILE pFile = pArea->pMemoFile;
pArea->uiNewBlockSize = pArea->uiMemoBlockSize;
pArea->ulNewBlockSize = pArea->ulMemoBlockSize;
pArea->pMemoFile = pArea->pMemoTmpFile;
errCode = SELF_CREATEMEMFILE( ( AREAP ) pArea, NULL );
@@ -4659,8 +4665,8 @@ static HB_ERRCODE hb_fptPack( FPTAREAP pArea )
ULONG ulNextBlock;
BYTE buffer[4];
ulNextBlock = ( ULONG ) ( ( size + pArea->uiNewBlockSize - 1 ) /
pArea->uiNewBlockSize );
ulNextBlock = ( ULONG ) ( ( size + pArea->ulNewBlockSize - 1 ) /
pArea->ulNewBlockSize );
if( pArea->bMemoType == DB_MEMO_SMT ||
pArea->bMemoType == DB_MEMO_DBT )
HB_PUT_LE_UINT32( buffer, ulNextBlock );
@@ -4671,7 +4677,7 @@ static HB_ERRCODE hb_fptPack( FPTAREAP pArea )
errCode = hb_fptCopyToFile( pArea->pMemoTmpFile, 0,
pArea->pMemoFile, 0, size );
hb_fileTruncAt( pArea->pMemoFile, size );
pArea->uiMemoBlockSize = pArea->uiNewBlockSize;
pArea->ulMemoBlockSize = pArea->ulNewBlockSize;
if( errCode != HB_SUCCESS )
{
hb_memoErrorRT( pArea, 0, errCode, errCode == EDBF_READ ?
@@ -4730,9 +4736,9 @@ static HB_ERRCODE hb_fptInfo( FPTAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
case DBI_MEMOBLOCKSIZE:
if( pArea->fHasMemo && pArea->pMemoFile )
hb_itemPutNI( pItem, pArea->uiMemoBlockSize );
else if( pArea->bMemoType && pArea->uiMemoBlockSize )
hb_itemPutNI( pItem, pArea->uiMemoBlockSize );
hb_itemPutNL( pItem, pArea->ulMemoBlockSize );
else if( pArea->bMemoType && pArea->ulMemoBlockSize )
hb_itemPutNL( pItem, pArea->ulMemoBlockSize );
else if( pArea->bMemoType == DB_MEMO_DBT )
hb_itemPutNI( pItem, DBT_DEFBLOCKSIZE );
else
@@ -4982,7 +4988,7 @@ static HB_ERRCODE hb_fptFieldInfo( FPTAREAP pArea, USHORT uiIndex, USHORT uiType
/* Clipper 5.3 does not support it :-( [druzus] */
hb_dbfGetMemoData( (DBFAREAP) pArea, uiIndex - 1,
&ulBlock, &ulSize, &ulType );
hb_itemPutNInt( pItem, ( HB_FOFFSET ) ulBlock * pArea->uiMemoBlockSize +
hb_itemPutNInt( pItem, ( HB_FOFFSET ) ulBlock * pArea->ulMemoBlockSize +
( pArea->bMemoType == DB_MEMO_FPT ? sizeof( FPTBLOCK ) : 0 ) );
return HB_SUCCESS;
case DBS_BLOB_POINTER:
@@ -5042,9 +5048,10 @@ static HB_ERRCODE hb_fptRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect
{
int iSize = hb_itemGetNI( pItem ), iOldSize;
if( pData->uiMemoBlockSize )
hb_itemPutNI( pItem, pData->uiMemoBlockSize );
else if( ( iOldSize = hb_setGetMBlockSize() ) > 0 && iOldSize <= 0xFFFF )
if( pData->ulMemoBlockSize )
hb_itemPutNL( pItem, pData->ulMemoBlockSize );
else if( ( iOldSize = hb_setGetMBlockSize() ) > 0 &&
( ( iOldSize <= 0x10000 ) || ( iOldSize & 0xFFFF ) == 0 ) )
hb_itemPutNI( pItem, iOldSize );
else if( pData->bMemoType == DB_MEMO_DBT )
hb_itemPutNI( pItem, DBT_DEFBLOCKSIZE );
@@ -5053,8 +5060,8 @@ static HB_ERRCODE hb_fptRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect
else
hb_itemPutNI( pItem, FPT_DEFBLOCKSIZE );
if( iSize > 0 && iSize <= 0xFFFF )
pData->uiMemoBlockSize = iSize;
if( iSize > 0 && ( iSize <= 0x10000 || ( iSize & 0xFFFF ) == 0 ) )
pData->ulMemoBlockSize = iSize;
break;
}
case RDDI_MEMOTYPE:

View File

@@ -3272,7 +3272,7 @@ static void hb_vmMinus( HB_ITEM_PTR pResult, HB_ITEM_PTR pItem1, HB_ITEM_PTR pIt
{
if( HB_IS_COMPLEX( pResult ) )
hb_itemClear( pResult );
HB_ITEM_PUT_NUMINTRAW( pResult, lJulian );
HB_ITEM_PUT_LONGRAW( pResult, lJulian );
}
}
else if( HB_IS_DATETIME( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
@@ -6548,15 +6548,7 @@ void hb_vmPushLong( long lNumber )
HB_TRACE(HB_TR_DEBUG, ("hb_vmPushLong(%ld)", lNumber));
#if HB_INT_MAX >= LONG_MAX
pItem->type = HB_IT_INTEGER;
pItem->item.asInteger.value = ( int ) lNumber;
pItem->item.asInteger.length = HB_INT_LENGTH( lNumber );
#else
pItem->type = HB_IT_LONG;
pItem->item.asLong.value = ( HB_LONG ) lNumber;
pItem->item.asLong.length = HB_LONG_LENGTH( lNumber );
#endif
HB_ITEM_PUT_LONGRAW( pItem, lNumber );
}
static void hb_vmPushHBLong( HB_LONG lNumber )

View File

@@ -964,15 +964,7 @@ PHB_ITEM hb_itemPutNL( PHB_ITEM pItem, long lNumber )
else
pItem = hb_itemNew( NULL );
#if HB_INT_MAX >= LONG_MAX
pItem->type = HB_IT_INTEGER;
pItem->item.asInteger.value = ( int ) lNumber;
pItem->item.asInteger.length = HB_INT_LENGTH( lNumber );
#else
pItem->type = HB_IT_LONG;
pItem->item.asLong.value = ( HB_LONG ) lNumber;
pItem->item.asLong.length = HB_LONG_LENGTH( lNumber );
#endif
HB_ITEM_PUT_LONGRAW( pItem, lNumber );
return pItem;
}
@@ -1269,7 +1261,7 @@ PHB_ITEM hb_itemPutNumType( PHB_ITEM pItem, double dNumber, int iDec, int iType1
else if( HB_DBL_LIM_LONG( dNumber ) )
{
#ifdef HB_LONG_LONG_OFF
return hb_itemPutNL( pItem, ( long ) dNumber );
return hb_itemPutNL( pItem, ( long ) ( unsigned long ) dNumber );
#else
return hb_itemPutNLL( pItem, ( LONGLONG ) dNumber );
#endif