From d24c53c741ecdb4192d894d2a8cbe52ce099275c Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Fri, 22 Jan 2010 22:46:49 +0000 Subject: [PATCH] 2010-01-22 23:46 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/rdd/dbf1.c ! fixed trailing character in empty DBF file - thanks to Saulius * added common RTE function, cleaned some RTE and added some missing ones --- harbour/ChangeLog | 5 + harbour/src/rdd/dbf1.c | 395 ++++++++++++----------------------------- 2 files changed, 122 insertions(+), 278 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5350b3384a..980045523d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,11 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-22 23:46 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/src/rdd/dbf1.c + ! fixed trailing character in empty DBF file - thanks to Saulius + * added common RTE function, cleaned some RTE and added some missing ones + 2010-01-22 22:19 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbnetio/utils/netiosrv.hbp * contrib/hbnetio/utils/netiosrv.prg diff --git a/harbour/src/rdd/dbf1.c b/harbour/src/rdd/dbf1.c index 8203febbf0..2edfc4490a 100644 --- a/harbour/src/rdd/dbf1.c +++ b/harbour/src/rdd/dbf1.c @@ -84,6 +84,43 @@ static RDDFUNCS dbfSuper; #define HB_BLANK_SKIP 100 #define HB_BLANK_AUTOINC 101 + +/* + * generate Run-Time error + */ +static HB_ERRCODE hb_dbfErrorRT( DBFAREAP pArea, + HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, + const char * szFileName, HB_ERRCODE errOsCode, + USHORT uiFlags, PHB_ITEM * pErrorPtr ) +{ + PHB_ITEM pError; + HB_ERRCODE errCode = HB_FAILURE; + + if( hb_vmRequestQuery() == 0 ) + { + if( pErrorPtr ) + { + if( ! *pErrorPtr ) + *pErrorPtr = hb_errNew(); + pError = *pErrorPtr; + } + else + pError = hb_errNew(); + hb_errPutGenCode( pError, errGenCode ); + hb_errPutSubCode( pError, errSubCode ); + hb_errPutOsCode( pError, errOsCode ); + hb_errPutDescription( pError, hb_langDGetErrorDesc( errGenCode ) ); + if( szFileName ) + hb_errPutFileName( pError, szFileName ); + if( uiFlags ) + hb_errPutFlags( pError, uiFlags ); + errCode = SELF_ERROR( ( AREAP ) pArea, pError ); + if( !pErrorPtr ) + hb_errRelease( pError ); + } + return errCode; +} + static HB_LONG hb_dbfGetRowVer( DBFAREAP pArea, USHORT uiField, HB_LONG * pValue ) { DBFFIELD dbField; @@ -454,15 +491,8 @@ static HB_BOOL hb_dbfReadRecord( DBFAREAP pArea ) ( HB_FOFFSET ) pArea->uiRecordLen ) != ( ULONG ) pArea->uiRecordLen ) { - PHB_ITEM pError = hb_errNew(); - - hb_errPutGenCode( pError, EG_READ ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READ ) ); - hb_errPutSubCode( pError, EDBF_READ ); - hb_errPutOsCode( pError, hb_fsError() ); - hb_errPutFileName( pError, pArea->szDataFileName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READ, EDBF_READ, + pArea->szDataFileName, hb_fsError(), 0, NULL ); return HB_FALSE; } @@ -1034,20 +1064,10 @@ HB_ERRCODE hb_dbfGetMemoData( DBFAREAP pArea, USHORT uiIndex, if( bByte >= '0' && bByte <= '9' ) ulValue = ulValue * 10 + ( bByte - '0' ); else if( bByte != ' ' || ulValue ) - { - PHB_ITEM pError = hb_errNew(); - HB_ERRCODE errCode; - - hb_errPutGenCode( pError, EG_CORRUPTION ); - hb_errPutSubCode( pError, EDBF_CORRUPT ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CORRUPTION ) ); - hb_errPutFileName( pError, pArea->szDataFileName ); - hb_errPutFlags( pError, EF_CANDEFAULT ); - errCode = SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); - - return errCode == E_DEFAULT ? HB_SUCCESS : HB_FAILURE; - } + return hb_dbfErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, + pArea->szDataFileName, 0, + EF_CANDEFAULT, NULL ) == E_DEFAULT ? + HB_SUCCESS : HB_FAILURE; } *pulBlock = ulValue; } @@ -1409,20 +1429,13 @@ static HB_ERRCODE hb_dbfGoTo( DBFAREAP pArea, ULONG ulRecNo ) */ static HB_ERRCODE hb_dbfGoToId( DBFAREAP pArea, PHB_ITEM pItem ) { - PHB_ITEM pError; - HB_TRACE(HB_TR_DEBUG, ("hb_dbfGoToId(%p, %p)", pArea, pItem)); if( HB_IS_NUMERIC( pItem ) ) return SELF_GOTO( ( AREAP ) pArea, hb_itemGetNL( pItem ) ); else { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_DATATYPE ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_DATATYPE ) ); - hb_errPutSubCode( pError, EDBF_DATATYPE ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_DATATYPE, EDBF_DATATYPE, NULL, 0, 0, NULL ); return HB_FAILURE; } } @@ -1557,7 +1570,6 @@ static HB_ERRCODE hb_dbfAddField( DBFAREAP pArea, LPDBFIELDINFO pFieldInfo ) static HB_ERRCODE hb_dbfAppend( DBFAREAP pArea, HB_BOOL bUnLockAll ) { ULONG ulNewRecord; - PHB_ITEM pError; USHORT fLocked; HB_ERRCODE errCode; @@ -1574,12 +1586,7 @@ static HB_ERRCODE hb_dbfAppend( DBFAREAP pArea, HB_BOOL bUnLockAll ) if( pArea->fReadonly ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_READONLY ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READONLY ) ); - hb_errPutSubCode( pError, EDBF_READONLY ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READONLY, EDBF_READONLY, NULL, 0, 0, NULL ); return HB_FAILURE; } @@ -1615,13 +1622,8 @@ static HB_ERRCODE hb_dbfAppend( DBFAREAP pArea, HB_BOOL bUnLockAll ) if( !fLocked ) { SELF_RAWLOCK( ( AREAP ) pArea, APPEND_UNLOCK, 0 ); - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_APPENDLOCK ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_APPENDLOCK ) ); - hb_errPutSubCode( pError, EDBF_APPENDLOCK ); - hb_errPutFlags( pError, EF_CANDEFAULT ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_APPENDLOCK, EDBF_APPENDLOCK, NULL, 0, + EF_CANDEFAULT, NULL ); return HB_FAILURE; } } @@ -2088,32 +2090,21 @@ static HB_ERRCODE hb_dbfGoCold( DBFAREAP pArea ) */ static HB_ERRCODE hb_dbfGoHot( DBFAREAP pArea ) { - PHB_ITEM pError; - HB_TRACE(HB_TR_DEBUG, ("hb_dbfGoHot(%p)", pArea)); if( pArea->fReadonly ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_READONLY ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READONLY ) ); - hb_errPutSubCode( pError, EDBF_READONLY ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READONLY, EDBF_READONLY, NULL, 0, 0, NULL ); return HB_FAILURE; } else if( pArea->fShared && !pArea->fFLocked && !hb_dbfIsLocked( pArea, pArea->ulRecNo ) ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_UNLOCKED ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_UNLOCKED ) ); - hb_errPutSubCode( pError, EDBF_UNLOCKED ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_UNLOCKED, EDBF_UNLOCKED, NULL, 0, 0, NULL ); return HB_FAILURE; } pArea->fRecordChanged = HB_TRUE; + return HB_SUCCESS; } @@ -2186,15 +2177,8 @@ static HB_ERRCODE hb_dbfPutRec( DBFAREAP pArea, const BYTE * pBuffer ) if( uiWritten != pArea->uiRecordLen ) { - PHB_ITEM pError = hb_errNew(); - - hb_errPutGenCode( pError, EG_WRITE ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_WRITE ) ); - hb_errPutSubCode( pError, EDBF_WRITE ); - hb_errPutOsCode( pError, hb_fsError() ); - hb_errPutFileName( pError, pArea->szDataFileName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_WRITE, EDBF_WRITE, pArea->szDataFileName, + hb_fsError(), 0, NULL ); return HB_FAILURE; } } @@ -2744,7 +2728,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) HB_ERRCODE errCode = HB_SUCCESS; ULONG ulSize; USHORT uiCount; - HB_BOOL fRetry, fError, fRawBlob; + HB_BOOL fError, fRawBlob; DBFFIELD * pThisField; BYTE * pBuffer; PHB_FNAME pFileName; @@ -2824,13 +2808,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) if( pArea->area.uiFieldCount * sizeof( DBFFIELD ) + sizeof( DBFHEADER ) + ( pArea->bTableType == DB_DBF_VFP ? 1 : 2 ) > UINT16_MAX ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CREATE ); - hb_errPutSubCode( pError, EDBF_DATAWIDTH ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CREATE ) ); - hb_errPutFileName( pError, pCreateInfo->abName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_CREATE, EDBF_DATAWIDTH, pCreateInfo->abName, 0, 0, NULL ); pArea->lpdbOpenInfo = NULL; return HB_FAILURE; } @@ -2848,28 +2826,13 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) FO_READWRITE | FO_EXCLUSIVE | FXO_TRUNCATE | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, NULL, pError ); - if( ! pArea->pDataFile ) - { - if( !pError ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CREATE ); - hb_errPutSubCode( pError, EDBF_CREATE_DBF ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CREATE ) ); - hb_errPutFileName( pError, szFileName ); - hb_errPutFlags( pError, EF_CANRETRY | EF_CANDEFAULT ); - } - hb_errPutOsCode( pError, hb_fsError() ); - fRetry = ( SELF_ERROR( ( AREAP ) pArea, pError ) == E_RETRY ); - } - else - fRetry = HB_FALSE; - } while( fRetry ); - - if( pError ) - { - hb_itemRelease( pError ); + if( pArea->pDataFile ) + break; } + while( hb_dbfErrorRT( pArea, EG_CREATE, EDBF_CREATE_DBF, szFileName, hb_fsError(), + EF_CANRETRY | EF_CANDEFAULT, &pError ) == E_RETRY ); + if( pError ) + hb_itemRelease( pError ); if( ! pArea->pDataFile ) { @@ -3089,14 +3052,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) { hb_xfree( pBuffer ); SELF_CLOSE( ( AREAP ) pArea ); - - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CREATE ); - hb_errPutSubCode( pError, EDBF_DATATYPE ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CREATE ) ); - hb_errPutFileName( pError, pCreateInfo->abName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_CREATE, EDBF_DATATYPE, pCreateInfo->abName, 0, 0, NULL ); pArea->lpdbOpenInfo = NULL; return HB_FAILURE; } @@ -3181,12 +3137,13 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) pBuffer[ ulSize - 2 ] = '\r'; pBuffer[ ulSize - 1 ] = '\0'; } - pBuffer[ ulSize ] = ' '; + pBuffer[ ulSize ] = '\032'; if( hb_fileWriteAt( pArea->pDataFile, pBuffer, ulSize + 1, sizeof( DBFHEADER ) ) != ulSize + 1 ) { - /* TODO: add RT error */ hb_xfree( pBuffer ); + hb_dbfErrorRT( pArea, EG_WRITE, EDBF_WRITE, pArea->szDataFileName, + hb_fsError(), 0, NULL ); SELF_CLOSE( ( AREAP ) pArea ); pArea->lpdbOpenInfo = NULL; return HB_FAILURE; @@ -3207,9 +3164,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) } /* If successful call SUPER_CREATE to finish system jobs */ if( errCode == HB_SUCCESS ) - { errCode = SUPER_CREATE( ( AREAP ) pArea, pCreateInfo ); - } if( errCode != HB_SUCCESS ) { @@ -3647,10 +3602,10 @@ static HB_ERRCODE hb_dbfNewArea( DBFAREAP pArea ) */ static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) { - HB_ERRCODE errCode; + HB_ERRCODE errCode, errOsCode; USHORT uiFlags, uiFields, uiCount, uiSkip; ULONG ulSize; - HB_BOOL fRetry, fRawBlob; + HB_BOOL fRawBlob; PHB_ITEM pError, pItem; PHB_FNAME pFileName; BYTE * pBuffer; @@ -3781,23 +3736,11 @@ static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) pArea->pDataFile = hb_fileExtOpen( szFileName, NULL, uiFlags | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, NULL, pError ); - if( !pArea->pDataFile ) - { - if( !pError ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_OPEN ); - hb_errPutSubCode( pError, EDBF_OPEN_DBF ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_OPEN ) ); - hb_errPutFileName( pError, szFileName ); - hb_errPutFlags( pError, EF_CANRETRY | EF_CANDEFAULT ); - } - hb_errPutOsCode( pError, hb_fsError() ); - fRetry = ( SELF_ERROR( ( AREAP ) pArea, pError ) == E_RETRY ); - } - else - fRetry = HB_FALSE; - } while( fRetry ); + if( pArea->pDataFile ) + break; + } + while( hb_dbfErrorRT( pArea, EG_OPEN, EDBF_OPEN_DBF, szFileName, hb_fsError(), + EF_CANRETRY | EF_CANDEFAULT, &pError ) == E_RETRY ); if( pError ) { @@ -3835,31 +3778,20 @@ static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) do { if( hb_fileReadAt( pArea->pDataFile, pBuffer, ulSize, - sizeof( DBFHEADER ) ) != ulSize ) - { - errCode = HB_FAILURE; - if( !pError ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CORRUPTION ); - hb_errPutSubCode( pError, EDBF_CORRUPT ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CORRUPTION ) ); - hb_errPutFileName( pError, pArea->szDataFileName ); - hb_errPutFlags( pError, EF_CANRETRY | EF_CANDEFAULT ); - } - fRetry = ( SELF_ERROR( ( AREAP ) pArea, pError ) == E_RETRY ); - } - else + sizeof( DBFHEADER ) ) == ulSize ) { errCode = HB_SUCCESS; break; } - } while( fRetry ); - - if( pError ) - { - hb_itemRelease( pError ); + errOsCode = hb_fsError(); + errCode = HB_FAILURE; } + while( hb_dbfErrorRT( pArea, errOsCode == 0 ? EG_CORRUPTION : EG_READ, + errOsCode == 0 ? EDBF_CORRUPT : EDBF_READ, + pArea->szDataFileName, errOsCode, + EF_CANRETRY | EF_CANDEFAULT, &pError ) == E_RETRY ); + if( pError ) + hb_itemRelease( pError ); /* Exit if error */ if( errCode != HB_SUCCESS ) @@ -4124,17 +4056,8 @@ static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) /* Exit if error */ if( errCode != HB_SUCCESS ) { - if( hb_vmRequestQuery() == 0 ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CORRUPTION ); - hb_errPutSubCode( pError, EDBF_CORRUPT ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CORRUPTION ) ); - hb_errPutFileName( pError, pArea->szDataFileName ); - hb_errPutFlags( pError, EF_CANDEFAULT ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); - } + hb_dbfErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, pArea->szDataFileName, + 0, EF_CANDEFAULT, NULL ); SELF_CLOSE( ( AREAP ) pArea ); pArea->lpdbOpenInfo = NULL; return errCode; @@ -4236,29 +4159,19 @@ static HB_ERRCODE hb_dbfPackRec( DBFAREAP pArea, ULONG ulRecNo, HB_BOOL *fWritte static HB_ERRCODE hb_dbfPack( DBFAREAP pArea ) { ULONG ulRecIn, ulRecOut, ulEvery, ulUserEvery; - PHB_ITEM pError, pBlock; + PHB_ITEM pBlock; HB_BOOL fWritten; HB_TRACE(HB_TR_DEBUG, ("hb_dbfPack(%p)", pArea)); if( pArea->fReadonly ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_READONLY ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READONLY ) ); - hb_errPutSubCode( pError, EDBF_READONLY ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READONLY, EDBF_READONLY, NULL, 0, 0, NULL ); return HB_FAILURE; } if( pArea->fShared ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_SHARED ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_SHARED ) ); - hb_errPutSubCode( pError, EDBF_SHARED ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_SHARED, EDBF_SHARED, NULL, 0, 0, NULL ); return HB_FAILURE; } @@ -4573,28 +4486,16 @@ static HB_ERRCODE hb_dbfTrans( DBFAREAP pArea, LPDBTRANSINFO pTransInfo ) */ static HB_ERRCODE hb_dbfZap( DBFAREAP pArea ) { - PHB_ITEM pError; - HB_TRACE(HB_TR_DEBUG, ("hb_dbfZap(%p)", pArea)); if( pArea->fReadonly ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_READONLY ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READONLY ) ); - hb_errPutSubCode( pError, EDBF_READONLY ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READONLY, EDBF_READONLY, NULL, 0, 0, NULL ); return HB_FAILURE; } if( pArea->fShared ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_SHARED ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_SHARED ) ); - hb_errPutSubCode( pError, EDBF_SHARED ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_SHARED, EDBF_SHARED, NULL, 0, 0, NULL ); return HB_FAILURE; } @@ -4951,21 +4852,13 @@ static HB_ERRCODE hb_dbfUnLock( DBFAREAP pArea, PHB_ITEM pRecNo ) */ static HB_ERRCODE hb_dbfCreateMemFile( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) { - PHB_ITEM pError; - HB_TRACE(HB_TR_DEBUG, ("hb_dbfCreateMemFile(%p, %p)", pArea, pCreateInfo)); if( pCreateInfo ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CREATE ); - hb_errPutSubCode( pError, EDBF_DATATYPE ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CREATE ) ); - hb_errPutFileName( pError, pCreateInfo->abName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); - } + hb_dbfErrorRT( pArea, EG_CREATE, EDBF_DATATYPE, pCreateInfo->abName, 0, 0, NULL ); + pArea->fHasMemo = HB_FALSE; + return HB_FAILURE; } @@ -5024,18 +4917,10 @@ static HB_ERRCODE hb_dbfGetValueFile( DBFAREAP pArea, USHORT uiIndex, const char /* Exit if any error */ if( errCode != HB_SUCCESS ) { - PHB_ITEM pError = hb_errNew(); - hb_errPutGenCode( pError, hb_dbfGetEGcode( errCode ) ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( hb_dbfGetEGcode( errCode ) ) ); - hb_errPutSubCode( pError, errCode ); - hb_errPutFlags( pError, EF_CANDEFAULT ); - if( errCode != EDBF_DATATYPE ) - { - hb_errPutOsCode( pError, hb_fsError() ); - hb_errPutFileName( pError, szFile ); - } - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, hb_dbfGetEGcode( errCode ), errCode, + errCode != EDBF_DATATYPE ? szFile : NULL, + errCode != EDBF_DATATYPE ? hb_fsError() : 0, + EF_CANDEFAULT, NULL ); return HB_FAILURE; } return HB_SUCCESS; @@ -5046,17 +4931,10 @@ static HB_ERRCODE hb_dbfGetValueFile( DBFAREAP pArea, USHORT uiIndex, const char */ static HB_ERRCODE hb_dbfOpenMemFile( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) { - PHB_ITEM pError; - HB_TRACE(HB_TR_DEBUG, ("hb_dbfOpenMemFile(%p, %p)", pArea, pOpenInfo)); - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_OPEN ); - hb_errPutSubCode( pError, EDBF_OPEN_DBF ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_OPEN ) ); - hb_errPutFileName( pError, pOpenInfo->abName ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_OPEN, EDBF_OPEN_DBF, pOpenInfo->abName, 0, 0, NULL ); + return HB_FAILURE; } @@ -5122,18 +5000,10 @@ static HB_ERRCODE hb_dbfPutValueFile( DBFAREAP pArea, USHORT uiIndex, const char /* Exit if any error */ if( errCode != HB_SUCCESS ) { - PHB_ITEM pError = hb_errNew(); - hb_errPutGenCode( pError, hb_dbfGetEGcode( errCode ) ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( hb_dbfGetEGcode( errCode ) ) ); - hb_errPutSubCode( pError, errCode ); - hb_errPutFlags( pError, EF_CANDEFAULT ); - if( errCode != EDBF_DATATYPE ) - { - hb_errPutOsCode( pError, hb_fsError() ); - hb_errPutFileName( pError, szFile ); - } - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, hb_dbfGetEGcode( errCode ), errCode, + errCode != EDBF_DATATYPE ? szFile : NULL, + errCode != EDBF_DATATYPE ? hb_fsError() : 0, + EF_CANDEFAULT, NULL ); return HB_FAILURE; } return HB_SUCCESS; @@ -5144,21 +5014,20 @@ static HB_ERRCODE hb_dbfPutValueFile( DBFAREAP pArea, USHORT uiIndex, const char */ static HB_ERRCODE hb_dbfReadDBHeader( DBFAREAP pArea ) { - HB_BOOL fRetry, fError; + HB_ERRCODE errCode; PHB_ITEM pError; HB_TRACE(HB_TR_DEBUG, ("hb_dbfReadDBHeader(%p)", pArea)); pError = NULL; - /* Try read */ do { - fError = HB_FALSE; + errCode = HB_SUCCESS; if( hb_fileReadAt( pArea->pDataFile, &pArea->dbfHeader, sizeof( DBFHEADER ), 0 ) != sizeof( DBFHEADER ) ) { - fError = HB_TRUE; + errCode = EDBF_READ; } else { @@ -5229,32 +5098,20 @@ static HB_ERRCODE hb_dbfReadDBHeader( DBFAREAP pArea ) break; default: - fError = HB_TRUE; - } - } - if( fError ) - { - if( !pError ) - { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_CORRUPTION ); - hb_errPutSubCode( pError, EDBF_CORRUPT ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_CORRUPTION ) ); - hb_errPutFileName( pError, pArea->szDataFileName ); - hb_errPutOsCode( pError, hb_fsError() ); - hb_errPutFlags( pError, EF_CANRETRY | EF_CANDEFAULT ); - } - fRetry = ( SELF_ERROR( ( AREAP ) pArea, pError ) == E_RETRY ); - } - else - fRetry = HB_FALSE; - } while( fRetry ); + errCode = EDBF_CORRUPT; + } + if( errCode == HB_SUCCESS ) + break; + } + } + while( hb_dbfErrorRT( pArea, hb_dbfGetEGcode( errCode ), errCode, + pArea->szDataFileName, hb_fsError(), + EF_CANRETRY | EF_CANDEFAULT, &pError ) == E_RETRY ); if( pError ) hb_itemRelease( pError ); - /* Read error? */ - if( fError ) + if( errCode != HB_SUCCESS ) return HB_FAILURE; pArea->uiHeaderLen = HB_GET_LE_UINT16( pArea->dbfHeader.uiHeaderLen ); @@ -5271,18 +5128,12 @@ static HB_ERRCODE hb_dbfWriteDBHeader( DBFAREAP pArea ) int iYear, iMonth, iDay; HB_BOOL fLck = HB_FALSE; HB_ERRCODE errCode; - PHB_ITEM pError; HB_TRACE(HB_TR_DEBUG, ("hb_dbfWriteDBHeader(%p)", pArea)); if( pArea->fReadonly ) { - pError = hb_errNew(); - hb_errPutGenCode( pError, EG_READONLY ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_READONLY ) ); - hb_errPutSubCode( pError, EDBF_READONLY ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); + hb_dbfErrorRT( pArea, EG_READONLY, EDBF_READONLY, NULL, 0, 0, NULL ); return HB_FAILURE; } @@ -5341,14 +5192,10 @@ static HB_ERRCODE hb_dbfWriteDBHeader( DBFAREAP pArea ) HB_PUT_LE_UINT16( pArea->dbfHeader.uiRecordLen, pArea->uiRecordLen ); if( hb_fileWriteAt( pArea->pDataFile, &pArea->dbfHeader, sizeof( DBFHEADER ), 0 ) == sizeof( DBFHEADER ) ) - { errCode = HB_SUCCESS; - } else - { errCode = HB_FAILURE; - } - /* TODO: add RT error */ + pArea->fDataFlush = HB_TRUE; pArea->fUpdateHeader = HB_FALSE; if( fLck ) @@ -5358,17 +5205,9 @@ static HB_ERRCODE hb_dbfWriteDBHeader( DBFAREAP pArea ) } if( errCode != HB_SUCCESS ) - { - pError = hb_errNew(); + hb_dbfErrorRT( pArea, EG_WRITE, EDBF_WRITE, pArea->szDataFileName, + hb_fsError(), 0, NULL ); - hb_errPutGenCode( pError, EG_WRITE ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_WRITE ) ); - hb_errPutSubCode( pError, EDBF_WRITE ); - hb_errPutFileName( pError, pArea->szDataFileName ); - hb_errPutOsCode( pError, hb_fsError() ); - SELF_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); - } return errCode; }