diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d89e05dd16..ce406cd0e7 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,15 @@ 2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-01-05 18:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/rdd/dbsql.c + * harbour/source/rdd/dbfntx/dbfntx1.c + * harbour/source/rdd/dbfnsx/dbfnsx1.c + * harbour/source/rdd/dbfcdx/dbfcdx1.c + * harbour/contrib/rddads/ads1.c + ! reuse the same error object when CANRETRY flag is set for valid + TRIES member update + 2009-01-05 13:33 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbgtcore.h * harbour/source/rtl/hbgtcore.c diff --git a/harbour/contrib/rddads/ads1.c b/harbour/contrib/rddads/ads1.c index ebb0d8df44..405e21eaf9 100644 --- a/harbour/contrib/rddads/ads1.c +++ b/harbour/contrib/rddads/ads1.c @@ -149,24 +149,35 @@ static void adsSetSend( void ) } static ERRCODE commonError( ADSAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, - USHORT uiOsCode, char * szFileName, USHORT uiFlags ) + USHORT uiOsCode, const char * szFileName, + USHORT uiFlags, PHB_ITEM * pErrorPtr ) { - ERRCODE errCode; PHB_ITEM pError; + ERRCODE errCode = FAILURE; - pError = hb_errNew(); - hb_errPutGenCode( pError, uiGenCode ); - hb_errPutSubCode( pError, uiSubCode ); - hb_errPutDescription( pError, hb_langDGetErrorDesc( uiGenCode ) ); - if( uiOsCode ) - hb_errPutOsCode( pError, uiOsCode ); - if( szFileName ) - hb_errPutFileName( pError, szFileName ); - if( uiFlags ) - hb_errPutFlags( pError, uiFlags ); - errCode = SUPER_ERROR( ( AREAP ) pArea, pError ); - hb_itemRelease( pError ); - + if( hb_vmRequestQuery() == 0 ) + { + if( pErrorPtr ) + { + if( ! *pErrorPtr ) + *pErrorPtr = hb_errNew(); + pError = *pErrorPtr; + } + else + pError = hb_errNew(); + hb_errPutGenCode( pError, uiGenCode ); + hb_errPutSubCode( pError, uiSubCode ); + hb_errPutDescription( pError, hb_langDGetErrorDesc( uiGenCode ) ); + if( uiOsCode ) + hb_errPutOsCode( pError, uiOsCode ); + if( szFileName ) + hb_errPutFileName( pError, szFileName ); + if( uiFlags ) + hb_errPutFlags( pError, uiFlags ); + errCode = SUPER_ERROR( ( AREAP ) pArea, pError ); + if( !pErrorPtr ) + hb_itemRelease( pError ); + } return errCode; } @@ -388,7 +399,7 @@ static ERRCODE hb_adsCheckLock( ADSAREAP pArea ) } if( !u16Locked ) { - commonError( pArea, EG_UNLOCKED, EDBF_UNLOCKED, 0, NULL, 0 ); + commonError( pArea, EG_UNLOCKED, EDBF_UNLOCKED, 0, NULL, 0, NULL ); return FAILURE; } } @@ -860,7 +871,7 @@ static ERRCODE adsGoToId( ADSAREAP pArea, PHB_ITEM pItem ) } else { - commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0 ); + commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0, NULL ); return FAILURE; } } @@ -899,7 +910,7 @@ static ERRCODE adsSeek( ADSAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFin if( ! pArea->hOrdCurrent ) { - commonError( pArea, EG_NOORDER, 1201, 0, NULL, EF_CANDEFAULT ); + commonError( pArea, EG_NOORDER, 1201, 0, NULL, EF_CANDEFAULT, NULL ); return FAILURE; } @@ -946,7 +957,7 @@ static ERRCODE adsSeek( ADSAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFin } else { - commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0 ); + commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0, NULL ); return FAILURE; } @@ -1335,13 +1346,13 @@ static ERRCODE adsAppend( ADSAREAP pArea, BOOL fUnLockAll ) } else if( u32RetVal == AE_TABLE_READONLY ) { - commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0 ); + commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0, NULL ); } else { /* 1001 and 7008 are standard ADS Open Errors that will usually be sharing issues */ USHORT uiOsCOde = u32RetVal == 1001 || u32RetVal == 7008 ? 32 : 0; - commonError( pArea, EG_APPENDLOCK, ( USHORT ) u32RetVal, uiOsCOde, NULL, EF_CANDEFAULT ); + commonError( pArea, EG_APPENDLOCK, ( USHORT ) u32RetVal, uiOsCOde, NULL, EF_CANDEFAULT, NULL ); } return FAILURE; @@ -2347,20 +2358,20 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem ) if( bTypeError ) { - commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0 ); + commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0, NULL ); return FAILURE; } if( ulRetVal != AE_SUCCESS ) { if( ulRetVal == AE_LOCK_FAILED || ulRetVal == AE_RECORD_NOT_LOCKED ) - commonError( pArea, EG_UNLOCKED, EDBF_UNLOCKED, 0, NULL, 0 ); + commonError( pArea, EG_UNLOCKED, EDBF_UNLOCKED, 0, NULL, 0, NULL ); else if( ulRetVal == AE_TABLE_READONLY ) - commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0 ); + commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0, NULL ); else if( ulRetVal == AE_DATA_TOO_LONG ) - commonError( pArea, EG_DATAWIDTH, EDBF_DATAWIDTH, 0, NULL, 0 ); + commonError( pArea, EG_DATAWIDTH, EDBF_DATAWIDTH, 0, NULL, 0, NULL ); else - commonError( pArea, EG_WRITE, ( USHORT ) ulRetVal, 0, NULL, 0 ); + commonError( pArea, EG_WRITE, ( USHORT ) ulRetVal, 0, NULL, 0, NULL ); return FAILURE; } @@ -2952,12 +2963,13 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo ) } else { - commonError( pArea, EG_OPEN, ( USHORT ) u32RetVal, 0, ( char * ) pOpenInfo->abName, 0 ); + commonError( pArea, EG_OPEN, ( USHORT ) u32RetVal, 0, ( char * ) pOpenInfo->abName, 0, NULL ); return FAILURE; } } else { + PHB_ITEM pError = NULL; BOOL fRetry; /* Use an Advantage Data Dictionary @@ -2980,14 +2992,17 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo ) /* 1001 and 7008 are standard ADS Open Errors that will usually be sharing issues */ USHORT uiOsCOde = u32RetVal == 1001 || u32RetVal == 7008 ? 32 : 0; fRetry = commonError( pArea, EG_OPEN, ( USHORT ) u32RetVal, uiOsCOde, - ( char * ) pOpenInfo->abName, - EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY; + ( const char * ) pOpenInfo->abName, + EF_CANRETRY | EF_CANDEFAULT, &pError ) == E_RETRY; } else fRetry = FALSE; } while( fRetry ); + if( pError ) + hb_errRelease( pError ); + if( u32RetVal != AE_SUCCESS ) return FAILURE; } @@ -3226,12 +3241,12 @@ static ERRCODE adsPack( ADSAREAP pArea ) if( pArea->fReadonly ) { - commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0 ); + commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0, NULL ); return FAILURE; } if( pArea->fShared ) { - commonError( pArea, EG_SHARED, EDBF_SHARED, 0, NULL, 0 ); + commonError( pArea, EG_SHARED, EDBF_SHARED, 0, NULL, 0, NULL ); return FAILURE; } @@ -3251,12 +3266,12 @@ static ERRCODE adsZap( ADSAREAP pArea ) if( pArea->fReadonly ) { - commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0 ); + commonError( pArea, EG_READONLY, EDBF_READONLY, 0, NULL, 0, NULL ); return FAILURE; } if( pArea->fShared ) { - commonError( pArea, EG_SHARED, EDBF_SHARED, 0, NULL, 0 ); + commonError( pArea, EG_SHARED, EDBF_SHARED, 0, NULL, 0, NULL ); return FAILURE; } @@ -3387,7 +3402,8 @@ static ERRCODE adsOrderListAdd( ADSAREAP pArea, LPDBORDERINFO pOrderInfo ) /* 1001 and 7008 are standard ADS Open Errors that will usually be sharing issues */ USHORT uiOsCOde = u32RetVal == 1001 || u32RetVal == 7008 ? 32 : 0; commonError( pArea, EG_OPEN, ( USHORT ) u32RetVal, uiOsCOde, - ( char * ) hb_itemGetCPtr( pOrderInfo->atomBagName ), EF_CANDEFAULT ); + ( char * ) hb_itemGetCPtr( pOrderInfo->atomBagName ), + EF_CANDEFAULT, NULL ); return FAILURE; } if( !pArea->hOrdCurrent && u16ArrayLen > 0 ) @@ -3628,7 +3644,7 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) if( u32RetVal != AE_SUCCESS ) { - commonError( pArea, EG_CREATE, ( USHORT ) u32RetVal, 0, ( char * ) pOrderInfo->abBagName, 0 ); + commonError( pArea, EG_CREATE, ( USHORT ) u32RetVal, 0, ( char * ) pOrderInfo->abBagName, 0, NULL ); return FAILURE; } else @@ -4357,7 +4373,7 @@ static ERRCODE adsGetValueFile( ADSAREAP pArea, USHORT uiIndex, BYTE * szFile, U ( UNSIGNED8* ) szFile ); if( u32RetVal != AE_SUCCESS ) { - /* commonError( pArea, EG_READ, ( USHORT ) u32RetVal, 0, NULL, 0 ); */ + /* commonError( pArea, EG_READ, ( USHORT ) u32RetVal, 0, NULL, 0, NULL ); */ return FAILURE; } return SUCCESS; @@ -4394,7 +4410,7 @@ static ERRCODE adsPutValueFile( ADSAREAP pArea, USHORT uiIndex, BYTE * szFile, U ( UNSIGNED8* ) szFile ); if( u32RetVal != AE_SUCCESS ) { - commonError( pArea, EG_WRITE, ( USHORT ) u32RetVal, 0, NULL, 0 ); + commonError( pArea, EG_WRITE, ( USHORT ) u32RetVal, 0, NULL, 0, NULL ); return FAILURE; } return SUCCESS; diff --git a/harbour/source/rdd/dbfcdx/dbfcdx1.c b/harbour/source/rdd/dbfcdx/dbfcdx1.c index dc43305d43..51425c01bc 100644 --- a/harbour/source/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/source/rdd/dbfcdx/dbfcdx1.c @@ -349,24 +349,34 @@ static void hb_cdxErrInternal( const char * szMsg ) /* * generate Run-Time error */ -static ERRCODE hb_cdxErrorRT( CDXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, const char * filename, USHORT uiOsCode, USHORT uiFlags ) +static ERRCODE hb_cdxErrorRT( CDXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, + const char * filename, USHORT uiOsCode, + USHORT uiFlags, PHB_ITEM * pErrorPtr ) { PHB_ITEM pError; ERRCODE iRet = FAILURE; - if ( hb_vmRequestQuery() == 0 ) + if( hb_vmRequestQuery() == 0 ) { - pError = hb_errNew(); + if( pErrorPtr ) + { + if( ! *pErrorPtr ) + *pErrorPtr = hb_errNew(); + pError = *pErrorPtr; + } + else + pError = hb_errNew(); hb_errPutGenCode( pError, uiGenCode ); hb_errPutSubCode( pError, uiSubCode ); hb_errPutOsCode( pError, uiOsCode ); hb_errPutDescription( pError, hb_langDGetErrorDesc( uiGenCode ) ); - if ( filename ) + if( filename ) hb_errPutFileName( pError, filename ); - if ( uiFlags ) + if( uiFlags ) hb_errPutFlags( pError, uiFlags ); iRet = SELF_ERROR( ( AREAP ) pArea, pError ); - hb_errRelease( pError ); + if( !pErrorPtr ) + hb_errRelease( pError ); } return iRet; } @@ -1293,7 +1303,7 @@ static BOOL hb_cdxIndexLockRead( LPCDXINDEX pIndex ) ret = hb_dbfLockIdxFile( pIndex->pFile, pIndex->pArea->bLockType, FL_LOCK | FLX_SHARED | FLX_WAIT, &pIndex->ulLockPos ); if ( !ret ) - hb_cdxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->szFileName, hb_fsError(), 0 ); + hb_cdxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->szFileName, hb_fsError(), 0, NULL ); if ( ret ) { @@ -1335,7 +1345,7 @@ static BOOL hb_cdxIndexLockWrite( LPCDXINDEX pIndex ) FL_LOCK | FLX_EXCLUSIVE | FLX_WAIT, &pIndex->ulLockPos ); } if ( !ret ) - hb_cdxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->szFileName, hb_fsError(), 0 ); + hb_cdxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->szFileName, hb_fsError(), 0, NULL ); if ( ret ) { @@ -3467,7 +3477,7 @@ static void hb_cdxTagHeaderStore( LPCDXTAG pTag ) if( uiKeyLen + uiForLen > CDX_HEADEREXPLEN - 2 ) { - hb_cdxErrorRT( pTag->pIndex->pArea, EG_DATAWIDTH, EDBF_KEYLENGTH, NULL, 0, 0 ); + hb_cdxErrorRT( pTag->pIndex->pArea, EG_DATAWIDTH, EDBF_KEYLENGTH, NULL, 0, 0, NULL ); } else { @@ -6530,7 +6540,7 @@ static ERRCODE hb_cdxSeek( CDXAREAP pArea, BOOL fSoftSeek, PHB_ITEM pKeyItm, BOO if ( ! pTag ) { - hb_cdxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT ); + hb_cdxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT, NULL ); return FAILURE; } else @@ -7180,6 +7190,7 @@ static ERRCODE hb_cdxOrderListAdd( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) char szFileName[ _POSIX_PATH_MAX + 1 ]; LPCDXINDEX pIndex, * pIndexPtr; BOOL fProd, bRetry; + PHB_ITEM pError = NULL; HB_TRACE(HB_TR_DEBUG, ("hb_cdxOrderListAdd(%p, %p)", pArea, pOrderInfo)); @@ -7215,10 +7226,11 @@ static ERRCODE hb_cdxOrderListAdd( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) { pFile = hb_fileExtOpen( ( BYTE * ) szFileName, NULL, uiFlags | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); if( !pFile ) - bRetry = ( hb_cdxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + bRetry = hb_cdxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; else { if( hb_fileSize( pFile ) <= ( HB_FOFFSET ) sizeof( CDXTAGHEADER ) ) @@ -7226,13 +7238,16 @@ static ERRCODE hb_cdxOrderListAdd( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) hb_fileClose( pFile ); pFile = NULL; hb_cdxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, - szFileName, hb_fsError(), EF_CANDEFAULT ); + szFileName, hb_fsError(), EF_CANDEFAULT, NULL ); } bRetry = FALSE; } } while( bRetry ); + if( pError ) + hb_errRelease( pError ); + if( !pFile ) { return FAILURE; @@ -7255,7 +7270,7 @@ static ERRCODE hb_cdxOrderListAdd( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) *pIndexPtr = NULL; hb_cdxIndexFree( pIndex ); hb_cdxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, - szFileName, hb_fsError(), EF_CANDEFAULT ); + szFileName, hb_fsError(), EF_CANDEFAULT, NULL ); return FAILURE; } @@ -7373,12 +7388,12 @@ static ERRCODE hb_cdxOrderListRebuild( CDXAREAP pArea ) if ( pArea->fShared ) { - hb_cdxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0 ); + hb_cdxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } if ( pArea->fReadonly ) { - hb_cdxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0 ); + hb_cdxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } @@ -7440,7 +7455,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_strlentrim( ( const char * ) pArea->lpdbOrdCondInfo->abFor ) : 0 ) > CDX_HEADEREXPLEN - 2 ) { - hb_cdxErrorRT( pArea, EG_DATAWIDTH, EDBF_KEYLENGTH, NULL, 0, 0 ); + hb_cdxErrorRT( pArea, EG_DATAWIDTH, EDBF_KEYLENGTH, NULL, 0, 0, NULL ); return FAILURE; } @@ -7496,13 +7511,13 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo { hb_vmDestroyBlockOrMacro( pKeyExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - hb_cdxErrorRT( pArea, bType == 'U' ? EG_DATATYPE : EG_DATAWIDTH, EDBF_INVALIDKEY, NULL, 0, 0 ); + hb_cdxErrorRT( pArea, bType == 'U' ? EG_DATATYPE : EG_DATAWIDTH, EDBF_INVALIDKEY, NULL, 0, 0, NULL ); return FAILURE; } #if defined(HB_COMPAT_C53) && defined(HB_C52_STRICT) else if ( bType == 'C' && uiLen > CDX_MAXKEY ) { - if( hb_cdxErrorRT( pArea, EG_DATAWIDTH, EDBF_INVALIDKEY, NULL, 0, EF_CANDEFAULT ) == E_DEFAULT ) + if( hb_cdxErrorRT( pArea, EG_DATAWIDTH, EDBF_INVALIDKEY, NULL, 0, EF_CANDEFAULT, NULL ) == E_DEFAULT ) uiLen = CDX_MAXKEY; else { @@ -7560,7 +7575,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_vmDestroyBlockOrMacro( pKeyExp ); hb_vmDestroyBlockOrMacro( pForExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - hb_cdxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0 ); + hb_cdxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0, NULL ); return FAILURE; } } @@ -7617,6 +7632,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo { PHB_FILE pFile; BOOL bRetry, fShared = pArea->fShared && !fTemporary && !fExclusive; + PHB_ITEM pError = NULL; do { @@ -7631,11 +7647,12 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ( fShared ? FO_DENYNONE : FO_EXCLUSIVE ) | ( fNewFile ? FXO_TRUNCATE : FXO_APPEND ) | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); } if( !pFile ) - bRetry = ( hb_cdxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + bRetry = hb_cdxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; else { bRetry = FALSE; @@ -7645,6 +7662,9 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo } while( bRetry ); + if( pError ) + hb_errRelease( pError ); + if( pFile ) { pIndex = hb_cdxIndexNew( pArea ); @@ -7667,7 +7687,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_fileClose( pFile ); pFile = NULL; hb_cdxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, - szFileName, hb_fsError(), EF_CANDEFAULT ); + szFileName, hb_fsError(), EF_CANDEFAULT, NULL ); */ hb_cdxIndexFreeTags( pIndex ); fNewFile = TRUE; @@ -8422,7 +8442,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pI } else { - hb_cdxErrorRT( pArea, 0, EDBF_NOTCUSTOM, NULL, 0, 0 ); + hb_cdxErrorRT( pArea, 0, EDBF_NOTCUSTOM, NULL, 0, 0, NULL ); } } break; @@ -8470,7 +8490,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pI } else { - hb_cdxErrorRT( pArea, 0, EDBF_NOTCUSTOM, NULL, 0, 0 ); + hb_cdxErrorRT( pArea, 0, EDBF_NOTCUSTOM, NULL, 0, 0, NULL ); } } break; diff --git a/harbour/source/rdd/dbfnsx/dbfnsx1.c b/harbour/source/rdd/dbfnsx/dbfnsx1.c index 0d837b8e42..7db964f588 100644 --- a/harbour/source/rdd/dbfnsx/dbfnsx1.c +++ b/harbour/source/rdd/dbfnsx/dbfnsx1.c @@ -451,14 +451,23 @@ static USHORT hb_nsxLeafPutKey( LPTAGINFO pTag, LPPAGEINFO pPage, USHORT uiOffse /* * generate Run-Time error */ -static ERRCODE hb_nsxErrorRT( NSXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, const char * szFileName, USHORT uiOsCode, USHORT uiFlags ) +static ERRCODE hb_nsxErrorRT( NSXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, + const char * szFileName, USHORT uiOsCode, + USHORT uiFlags, PHB_ITEM * pErrorPtr ) { PHB_ITEM pError; ERRCODE iRet = FAILURE; if( hb_vmRequestQuery() == 0 ) { - pError = hb_errNew(); + if( pErrorPtr ) + { + if( ! *pErrorPtr ) + *pErrorPtr = hb_errNew(); + pError = *pErrorPtr; + } + else + pError = hb_errNew(); hb_errPutGenCode( pError, uiGenCode ); hb_errPutSubCode( pError, uiSubCode ); hb_errPutOsCode( pError, uiOsCode ); @@ -468,7 +477,8 @@ static ERRCODE hb_nsxErrorRT( NSXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode if( uiFlags ) hb_errPutFlags( pError, uiFlags ); iRet = SELF_ERROR( ( AREAP ) pArea, pError ); - hb_errRelease( pError ); + if( !pErrorPtr ) + hb_errRelease( pError ); } return iRet; } @@ -476,7 +486,7 @@ static ERRCODE hb_nsxErrorRT( NSXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode static void hb_nsxCorruptError( LPNSXINDEX pIndex ) { hb_nsxErrorRT( pIndex->pArea, EG_CORRUPTION, EDBF_CORRUPT, - pIndex->IndexName, 0, 0 ); + pIndex->IndexName, 0, 0, NULL ); } /* @@ -1117,7 +1127,7 @@ static BOOL hb_nsxBlockRead( LPNSXINDEX pIndex, ULONG ulBlock, BYTE *buffer, int hb_nsxFileOffset( pIndex, ulBlock ) ) != ( ULONG ) iSize ) { hb_nsxErrorRT( pIndex->pArea, EG_READ, EDBF_READ, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FALSE; } return TRUE; @@ -1135,7 +1145,7 @@ static BOOL hb_nsxBlockWrite( LPNSXINDEX pIndex, ULONG ulBlock, BYTE *buffer, in hb_nsxFileOffset( pIndex, ulBlock ) ) != ( ULONG ) iSize ) { hb_nsxErrorRT( pIndex->pArea, EG_WRITE, EDBF_WRITE, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FALSE; } return TRUE; @@ -2093,7 +2103,7 @@ static BOOL hb_nsxIndexLockRead( LPNSXINDEX pIndex ) } } if( !fOK ) - hb_nsxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0 ); + hb_nsxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0, NULL ); return fOK; } @@ -2136,7 +2146,7 @@ static BOOL hb_nsxIndexLockWrite( LPNSXINDEX pIndex, BOOL fCheck ) } } if( !fOK ) - hb_nsxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0 ); + hb_nsxErrorRT( pIndex->pArea, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0, NULL ); return fOK; } @@ -4943,7 +4953,7 @@ static void hb_nsxSortBufferFlush( LPNSXSORTINFO pSort ) hb_nsxFileOffset( pIndex, pSort->ulFirstIO ) ) != ulSize ) { hb_nsxErrorRT( pIndex->pArea, EG_WRITE, EDBF_WRITE, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); } pSort->ulPagesIO = 0; pIndex->fFlush = TRUE; @@ -5077,7 +5087,7 @@ static void hb_nsxSortWritePage( LPNSXSORTINFO pSort ) pSort->hTempFile = hb_fsCreateTemp( NULL, NULL, FC_NORMAL, szName ); if( pSort->hTempFile == FS_ERROR ) hb_nsxErrorRT( pSort->pTag->pIndex->pArea, EG_CREATE, EDBF_CREATE_TEMP, - ( const char * ) szName, 0, 0 ); + ( const char * ) szName, 0, 0, NULL ); else pSort->szTempFileName = hb_strdup( ( const char * ) szName ); } @@ -5088,7 +5098,7 @@ static void hb_nsxSortWritePage( LPNSXSORTINFO pSort ) pSort->pSwapPage[ pSort->ulCurPage ].nOffset = hb_fsSeekLarge( pSort->hTempFile, 0, FS_END ); if( hb_fsWriteLarge( pSort->hTempFile, pSort->pStartKey, ulSize ) != ulSize ) hb_nsxErrorRT( pSort->pTag->pIndex->pArea, EG_WRITE, EDBF_WRITE_TEMP, - pSort->szTempFileName, 0, 0 ); + pSort->szTempFileName, 0, 0, NULL ); } else pSort->pSwapPage[ pSort->ulCurPage ].nOffset = 0; @@ -5111,7 +5121,7 @@ static void hb_nsxSortGetPageKey( LPNSXSORTINFO pSort, ULONG ulPage, hb_fsReadLarge( pSort->hTempFile, pSort->pSwapPage[ ulPage ].pKeyPool, ulSize ) != ulSize ) ) { hb_nsxErrorRT( pSort->pTag->pIndex->pArea, EG_READ, EDBF_READ_TEMP, - pSort->szTempFileName, 0, 0 ); + pSort->szTempFileName, 0, 0, NULL ); } pSort->pSwapPage[ ulPage ].nOffset += ulSize; pSort->pSwapPage[ ulPage ].ulKeyBuf = ulKeys; @@ -5809,7 +5819,7 @@ static ERRCODE hb_nsxTagCreate( LPTAGINFO pTag, BOOL fReindex ) default: hb_nsxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDKEY, - pTag->pIndex->IndexName, 0, 0 ); + pTag->pIndex->IndexName, 0, 0, NULL ); errCode = FAILURE; pTag->Partial = TRUE; pEvalItem = NULL; @@ -5990,7 +6000,7 @@ static ERRCODE hb_nsxSeek( NSXAREAP pArea, BOOL fSoftSeek, PHB_ITEM pItem, BOOL if( ! pArea->lpCurTag ) { - hb_nsxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT ); + hb_nsxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT, NULL ); return FAILURE; } else @@ -6555,7 +6565,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_vmDestroyBlockOrMacro( pKeyExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); hb_nsxErrorRT( pArea, bType == 'U' ? EG_DATATYPE : EG_DATAWIDTH, - 1026, NULL, 0, 0 ); + 1026, NULL, 0, 0, NULL ); return FAILURE; } @@ -6606,7 +6616,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_vmDestroyBlockOrMacro( pKeyExp ); hb_vmDestroyBlockOrMacro( pForExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - hb_nsxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0 ); + hb_nsxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0, NULL ); return FAILURE; } } @@ -6634,7 +6644,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_vmDestroyBlockOrMacro( pKeyExp ); if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); - hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #if 0 /* enable this code if you want to forbid tag deleting in shared mode */ @@ -6643,7 +6653,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo hb_vmDestroyBlockOrMacro( pKeyExp ); if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); - hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #endif @@ -6653,6 +6663,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo PHB_FILE pFile; BOOL bRetry, fShared = pArea->fShared && !fTemporary && !fExclusive; USHORT uiFlags = FO_READWRITE | ( fShared ? FO_DENYNONE : FO_EXCLUSIVE ); + PHB_ITEM pError = NULL; do { @@ -6666,11 +6677,12 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo pFile = hb_fileExtOpen( ( BYTE * ) szFileName, NULL, uiFlags | ( fNewFile ? FXO_TRUNCATE : FXO_APPEND ) | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); } if( !pFile ) - bRetry = ( hb_nsxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + bRetry = hb_nsxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; else { bRetry = FALSE; @@ -6680,6 +6692,9 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo } while( bRetry ); + if( pError ) + hb_errRelease( pError ); + if( !pFile ) { hb_vmDestroyBlockOrMacro( pKeyExp ); @@ -6719,7 +6734,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); /* hb_nsxSetTagNumbers() */ - hb_nsxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0, NULL ); return errCode; } } @@ -6747,7 +6762,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); /* hb_nsxSetTagNumbers() */ - hb_nsxErrorRT( pArea, EG_LIMIT, EDBF_LIMITEXCEEDED, pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_LIMIT, EDBF_LIMITEXCEEDED, pIndex->IndexName, 0, 0, NULL ); errCode = FAILURE; } @@ -6880,13 +6895,13 @@ static ERRCODE hb_nsxOrderDestroy( NSXAREAP pArea, LPDBORDERINFO pOrderInfo ) } else if( pIndex->fReadonly ) { - hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #if 0 /* enable this code if you want to forbid tag deleting in shared mode */ else if( pIndex->fShared ) { - hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #endif @@ -7287,7 +7302,7 @@ static ERRCODE hb_nsxOrderInfo( NSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pI case DBOI_KEYADD: if( pTag->pIndex->fReadonly ) { - hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->pIndex->IndexName, 0, 0, NULL ); return FAILURE; } if( pTag->Custom ) @@ -7297,14 +7312,14 @@ static ERRCODE hb_nsxOrderInfo( NSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pI } else { - hb_nsxErrorRT( pArea, 0, 1052, NULL, 0, 0 ); + hb_nsxErrorRT( pArea, 0, 1052, NULL, 0, 0, NULL ); return FAILURE; } break; case DBOI_KEYDELETE: if( pTag->pIndex->fReadonly ) { - hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->pIndex->IndexName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->pIndex->IndexName, 0, 0, NULL ); return FAILURE; } if( pTag->Custom ) @@ -7314,7 +7329,7 @@ static ERRCODE hb_nsxOrderInfo( NSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pI } else { - hb_nsxErrorRT( pArea, 0, 1052, NULL, 0, 0 ); + hb_nsxErrorRT( pArea, 0, 1052, NULL, 0, 0, NULL ); return FAILURE; } break; @@ -7609,6 +7624,7 @@ static ERRCODE hb_nsxOrderListAdd( NSXAREAP pArea, LPDBORDERINFO pOrderInfo ) if( ! pIndex ) { + PHB_ITEM pError = NULL; fReadonly = pArea->fReadonly; fShared = pArea->fShared; uiFlags = ( fReadonly ? FO_READ : FO_READWRITE ) | @@ -7618,15 +7634,19 @@ static ERRCODE hb_nsxOrderListAdd( NSXAREAP pArea, LPDBORDERINFO pOrderInfo ) fRetry = FALSE; pFile = hb_fileExtOpen( ( BYTE * ) szFileName, NULL, uiFlags | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); if( !pFile ) { - fRetry = ( hb_nsxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + fRetry = hb_nsxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; } } while( fRetry ); + if( pError ) + hb_errRelease( pError ); + if( !pFile ) return FAILURE; @@ -7648,7 +7668,7 @@ static ERRCODE hb_nsxOrderListAdd( NSXAREAP pArea, LPDBORDERINFO pOrderInfo ) if( errCode != SUCCESS ) { hb_nsxIndexFree( pIndex ); - hb_nsxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0, NULL ); return errCode; } @@ -7776,12 +7796,12 @@ static ERRCODE hb_nsxOrderListRebuild( NSXAREAP pArea ) if( pArea->fShared ) { - hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } if( pArea->fReadonly ) { - hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0 ); + hb_nsxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index eb0255b158..bc36170367 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -252,14 +252,23 @@ static ULONG hb_ntxGetKeyRec( LPPAGEINFO pPage, SHORT iKey ) /* * generate Run-Time error */ -static ERRCODE hb_ntxErrorRT( NTXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, char * szFileName, USHORT uiOsCode, USHORT uiFlags ) +static ERRCODE hb_ntxErrorRT( NTXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, + const char * szFileName, USHORT uiOsCode, + USHORT uiFlags, PHB_ITEM * pErrorPtr ) { PHB_ITEM pError; ERRCODE iRet = FAILURE; if( hb_vmRequestQuery() == 0 ) { - pError = hb_errNew(); + if( pErrorPtr ) + { + if( ! *pErrorPtr ) + *pErrorPtr = hb_errNew(); + pError = *pErrorPtr; + } + else + pError = hb_errNew(); hb_errPutGenCode( pError, uiGenCode ); hb_errPutSubCode( pError, uiSubCode ); hb_errPutOsCode( pError, uiOsCode ); @@ -269,7 +278,8 @@ static ERRCODE hb_ntxErrorRT( NTXAREAP pArea, USHORT uiGenCode, USHORT uiSubCode if( uiFlags ) hb_errPutFlags( pError, uiFlags ); iRet = SELF_ERROR( ( AREAP ) pArea, pError ); - hb_errRelease( pError ); + if( !pErrorPtr ) + hb_errRelease( pError ); } return iRet; } @@ -908,7 +918,7 @@ static BOOL hb_ntxBlockRead( LPNTXINDEX pIndex, ULONG ulBlock, BYTE *buffer, int hb_ntxFileOffset( pIndex, ulBlock ) ) != ( ULONG ) iSize ) { hb_ntxErrorRT( pIndex->Owner, EG_READ, EDBF_READ, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FALSE; } return TRUE; @@ -929,7 +939,7 @@ static BOOL hb_ntxBlockWrite( LPNTXINDEX pIndex, ULONG ulBlock, BYTE *buffer, in hb_ntxFileOffset( pIndex, ulBlock ) ) != ( ULONG ) iSize ) { hb_ntxErrorRT( pIndex->Owner, EG_WRITE, EDBF_WRITE, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FALSE; } return TRUE; @@ -1221,7 +1231,7 @@ static LPPAGEINFO hb_ntxPageLoad( LPTAGINFO pTag, ULONG ulPage ) if( !ulPage ) { hb_ntxErrorRT( pTag->Owner->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); return NULL; } } @@ -1321,7 +1331,7 @@ static LPPAGEINFO hb_ntxPageNew( LPTAGINFO pTag, BOOL fNull ) if( pPage->uiKeys != 0 ) { hb_ntxErrorRT( pTag->Owner->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); return NULL; } #endif @@ -1890,7 +1900,7 @@ static ERRCODE hb_ntxIndexHeaderRead( LPNTXINDEX pIndex ) { #if defined( HB_NTX_NOMULTITAG ) hb_ntxErrorRT( pIndex->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FAILURE; #else LPCTXHEADER lpCTX = ( LPCTXHEADER ) pIndex->HeaderBuff; @@ -1928,7 +1938,7 @@ static ERRCODE hb_ntxIndexHeaderRead( LPNTXINDEX pIndex ) if( pIndex->Compound ) { hb_ntxErrorRT( pIndex->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); return FAILURE; } pTag = pIndex->iTags ? pIndex->lpTags[0] : NULL; @@ -2021,7 +2031,8 @@ static BOOL hb_ntxIndexLockRead( LPNTXINDEX pIndex ) } } if( !fOK ) - hb_ntxErrorRT( pIndex->Owner, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0 ); + hb_ntxErrorRT( pIndex->Owner, EG_LOCK, EDBF_LOCK, + pIndex->IndexName, hb_fsError(), 0, NULL ); return fOK; } @@ -2064,7 +2075,8 @@ static BOOL hb_ntxIndexLockWrite( LPNTXINDEX pIndex, BOOL fCheck ) } } if( !fOK ) - hb_ntxErrorRT( pIndex->Owner, EG_LOCK, EDBF_LOCK, pIndex->IndexName, hb_fsError(), 0 ); + hb_ntxErrorRT( pIndex->Owner, EG_LOCK, EDBF_LOCK, + pIndex->IndexName, hb_fsError(), 0, NULL ); return fOK; } @@ -2154,7 +2166,7 @@ static BOOL hb_ntxTagLockRead( LPTAGINFO pTag ) { hb_ntxIndexUnLockRead( pTag->Owner ); hb_ntxErrorRT( pTag->Owner->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); } } return fOK; @@ -2174,7 +2186,7 @@ static BOOL hb_ntxTagLockWrite( LPTAGINFO pTag ) { hb_ntxIndexUnLockWrite( pTag->Owner ); hb_ntxErrorRT( pTag->Owner->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); } } return fOK; @@ -4668,7 +4680,7 @@ static void hb_ntxSortBufferFlush( LPNTXSORTINFO pSort ) hb_ntxFileOffset( pIndex, pSort->ulFirstIO ) ) != ulSize ) { hb_ntxErrorRT( pIndex->Owner, EG_WRITE, EDBF_WRITE, - pIndex->IndexName, hb_fsError(), 0 ); + pIndex->IndexName, hb_fsError(), 0, NULL ); } pSort->ulPagesIO = 0; pIndex->fFlush = TRUE; @@ -4750,9 +4762,9 @@ static void hb_ntxSortWritePage( LPNTXSORTINFO pSort ) pSort->hTempFile = hb_fsCreateTemp( NULL, NULL, FC_NORMAL, szName ); if( pSort->hTempFile == FS_ERROR ) hb_ntxErrorRT( pSort->pTag->Owner->Owner, EG_CREATE, EDBF_CREATE_TEMP, - ( char * ) szName, 0, 0 ); + ( const char * ) szName, 0, 0, NULL ); else - pSort->szTempFileName = hb_strdup( ( char * ) szName ); + pSort->szTempFileName = hb_strdup( ( const char * ) szName ); } pSort->pSwapPage[ pSort->ulCurPage ].ulKeys = pSort->ulKeys; @@ -4761,7 +4773,7 @@ static void hb_ntxSortWritePage( LPNTXSORTINFO pSort ) pSort->pSwapPage[ pSort->ulCurPage ].nOffset = hb_fsSeekLarge( pSort->hTempFile, 0, FS_END ); if( hb_fsWriteLarge( pSort->hTempFile, pSort->pStartKey, ulSize ) != ulSize ) hb_ntxErrorRT( pSort->pTag->Owner->Owner, EG_WRITE, EDBF_WRITE_TEMP, - pSort->szTempFileName, 0, 0 ); + pSort->szTempFileName, 0, 0, NULL ); } else pSort->pSwapPage[ pSort->ulCurPage ].nOffset = 0; @@ -4784,7 +4796,7 @@ static void hb_ntxSortGetPageKey( LPNTXSORTINFO pSort, ULONG ulPage, hb_fsReadLarge( pSort->hTempFile, pSort->pSwapPage[ ulPage ].pKeyPool, ulSize ) != ulSize ) ) { hb_ntxErrorRT( pSort->pTag->Owner->Owner, EG_READ, EDBF_READ_TEMP, - pSort->szTempFileName, 0, 0 ); + pSort->szTempFileName, 0, 0, NULL ); } pSort->pSwapPage[ ulPage ].nOffset += ulSize; pSort->pSwapPage[ ulPage ].ulKeyBuf = ulKeys; @@ -5424,7 +5436,7 @@ static ERRCODE hb_ntxTagCreate( LPTAGINFO pTag, BOOL fReindex ) default: hb_ntxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDKEY, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); errCode = FAILURE; pTag->Partial = TRUE; pEvalItem = NULL; @@ -5605,7 +5617,7 @@ static ERRCODE ntxSeek( NTXAREAP pArea, BOOL fSoftSeek, PHB_ITEM pItem, BOOL fFi if( ! pArea->lpCurTag ) { - hb_ntxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT ); + hb_ntxErrorRT( pArea, EG_NOORDER, EDBF_NOTINDEXED, NULL, 0, EF_CANDEFAULT, NULL ); return FAILURE; } else @@ -5885,7 +5897,7 @@ static ERRCODE ntxGoCold( NTXAREAP pArea ) else if( !pTag->Partial && !pTag->UniqueKey ) hb_ntxErrorRT( pTag->Owner->Owner, EG_CORRUPTION, EDBF_CORRUPT, - pTag->Owner->IndexName, 0, 0 ); + pTag->Owner->IndexName, 0, 0, NULL ); } } if( fAdd ) @@ -6167,7 +6179,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) hb_vmDestroyBlockOrMacro( pKeyExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); hb_ntxErrorRT( pArea, bType == 'U' ? EG_DATATYPE : EG_DATAWIDTH, - 1026, NULL, 0, 0 ); + 1026, NULL, 0, 0, NULL ); return FAILURE; } @@ -6218,7 +6230,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) hb_vmDestroyBlockOrMacro( pKeyExp ); hb_vmDestroyBlockOrMacro( pForExp ); SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - hb_ntxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0 ); + hb_ntxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0, NULL ); return FAILURE; } } @@ -6272,7 +6284,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) hb_vmDestroyBlockOrMacro( pKeyExp ); if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); - hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #if 0 /* enable this code if you want to forbid tag deleting in shared mode */ @@ -6281,7 +6293,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) hb_vmDestroyBlockOrMacro( pKeyExp ); if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); - hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #endif @@ -6291,6 +6303,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) PHB_FILE pFile; BOOL bRetry, fOld, fShared = pArea->fShared && !fTemporary && !fExclusive; USHORT uiFlags = FO_READWRITE | ( fShared ? FO_DENYNONE : FO_EXCLUSIVE ); + PHB_ITEM pError = NULL; fOld = fCompound; do @@ -6305,20 +6318,24 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) pFile = hb_fileExtOpen( ( BYTE * ) szFileName, NULL, uiFlags | ( fOld ? FXO_APPEND : FXO_TRUNCATE ) | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); } if( !pFile ) - bRetry = ( hb_ntxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + bRetry = hb_ntxErrorRT( pArea, EG_CREATE, EDBF_CREATE, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; else { bRetry = FALSE; if( fOld ) - fOld = ( hb_fileSize( pFile ) != 0 ); + fOld = hb_fileSize( pFile ) != 0; } } while( bRetry ); + if( pError ) + hb_errRelease( pError ); + if( !pFile ) { hb_vmDestroyBlockOrMacro( pKeyExp ); @@ -6363,7 +6380,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); /* hb_ntxSetTagNumbers() */ - hb_ntxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0, NULL ); return errCode; } } @@ -6384,7 +6401,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) if( pForExp != NULL ) hb_vmDestroyBlockOrMacro( pForExp ); /* hb_ntxSetTagNumbers() */ - hb_ntxErrorRT( pArea, EG_LIMIT, EDBF_LIMITEXCEEDED, pIndex->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_LIMIT, EDBF_LIMITEXCEEDED, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } @@ -6540,13 +6557,13 @@ static ERRCODE ntxOrderDestroy( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) } else if( pIndex->fReadonly ) { - hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #if 0 /* enable this code if you want to forbid tag deleting in shared mode */ else if( pIndex->fShared ) { - hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pIndex->IndexName, 0, 0, NULL ); return FAILURE; } #endif @@ -6929,7 +6946,8 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo case DBOI_KEYADD: if( pTag->Owner->fReadonly ) { - hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->Owner->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, + pTag->Owner->IndexName, 0, 0, NULL ); return FAILURE; } if( pTag->Custom ) @@ -6939,14 +6957,15 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo } else { - hb_ntxErrorRT( pArea, 0, 1052, NULL, 0, 0 ); + hb_ntxErrorRT( pArea, 0, 1052, NULL, 0, 0, NULL ); return FAILURE; } break; case DBOI_KEYDELETE: if( pTag->Owner->fReadonly ) { - hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pTag->Owner->IndexName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, + pTag->Owner->IndexName, 0, 0, NULL ); return FAILURE; } if( pTag->Custom ) @@ -6956,7 +6975,7 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo } else { - hb_ntxErrorRT( pArea, 0, 1052, NULL, 0, 0 ); + hb_ntxErrorRT( pArea, 0, 1052, NULL, 0, 0, NULL ); return FAILURE; } break; @@ -7274,6 +7293,8 @@ static ERRCODE ntxOrderListAdd( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) if( ! pIndex ) { + PHB_ITEM pError = NULL; + fReadonly = pArea->fReadonly; fShared = pArea->fShared; uiFlags = ( fReadonly ? FO_READ : FO_READWRITE ) | @@ -7283,15 +7304,19 @@ static ERRCODE ntxOrderListAdd( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) fRetry = FALSE; pFile = hb_fileExtOpen( ( BYTE * ) szFileName, NULL, uiFlags | FXO_DEFAULTS | FXO_SHARELOCK | FXO_COPYNAME, - NULL, NULL ); + NULL, pError ); if( !pFile ) { - fRetry = ( hb_ntxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, - hb_fsError(), EF_CANRETRY | EF_CANDEFAULT ) == E_RETRY ); + fRetry = hb_ntxErrorRT( pArea, EG_OPEN, EDBF_OPEN_INDEX, szFileName, + hb_fsError(), EF_CANRETRY | EF_CANDEFAULT, + &pError ) == E_RETRY; } } while( fRetry ); + if( pError ) + hb_errRelease( pError ); + if( !pFile ) return FAILURE; @@ -7319,7 +7344,7 @@ static ERRCODE ntxOrderListAdd( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) { *pIndexPtr = pIndex->pNext; hb_ntxIndexFree( pIndex ); - hb_ntxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_CORRUPTION, EDBF_CORRUPT, szFileName, 0, 0, NULL ); return errCode; } /* hb_ntxSetTagNumbers() */ @@ -7441,12 +7466,12 @@ static ERRCODE ntxOrderListRebuild( NTXAREAP pArea ) if( pArea->fShared ) { - hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_SHARED, EDBF_SHARED, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } if( pArea->fReadonly ) { - hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0 ); + hb_ntxErrorRT( pArea, EG_READONLY, EDBF_READONLY, pArea->szDataFileName, 0, 0, NULL ); return FAILURE; } diff --git a/harbour/source/rdd/dbsql.c b/harbour/source/rdd/dbsql.c index 56ffccf9ed..f941fa4157 100644 --- a/harbour/source/rdd/dbsql.c +++ b/harbour/source/rdd/dbsql.c @@ -388,8 +388,8 @@ HB_FUNC( __DBSQL ) hb_errPutFileName( pError, szFileName ); hb_errPutFlags( pError, EF_CANRETRY | EF_CANDEFAULT ); hb_errPutSubSystem( pError, "DBF2SQL" ); + hb_errPutOsCode( pError, hb_fsError() ); } - hb_errPutOsCode( pError, hb_fsError() ); fRetry = hb_errLaunch( pError ) == E_RETRY; } else