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:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 ) ? \
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user