From ea545c0135194a87a073d648418f1a74f0e6abff Mon Sep 17 00:00:00 2001 From: Paul Tucker Date: Thu, 23 Mar 2000 02:57:59 +0000 Subject: [PATCH] Optimised - added note about retry operation --- harbour/ChangeLog | 6 ++++++ harbour/source/rtl/diskspac.c | 38 ++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 9fc01c79c5..a456c7de37 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,9 @@ +20000322-21:55 EST Paul Tucker + * source/rtl/diskspac.c + * accounted for possibility of retrying the operation + * (though I didn't activate it - see notes) + * optimized some assigns. + 20000322-21:10 GMT -3 Luiz Rafael Culik Missed from previos session *doc/en/array.txt diff --git a/harbour/source/rtl/diskspac.c b/harbour/source/rtl/diskspac.c index 0491987f17..7a5f508121 100644 --- a/harbour/source/rtl/diskspac.c +++ b/harbour/source/rtl/diskspac.c @@ -78,6 +78,11 @@ HB_FUNC( DISKSPACE ) { USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY with + EF_CANDEFAULT above) + */ + if( uiAction == E_DEFAULT || uiAction == E_BREAK ) break; } @@ -109,6 +114,7 @@ HB_FUNC( DISKSPACE ) #elif defined(HB_OS_WIN_32) + while( 1 ) { typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, @@ -170,17 +176,17 @@ HB_FUNC( DISKSPACE ) #if defined(__GNUC__) || defined(_MSC_VER) - dSpace = ( double ) i64RetVal.HighPart + + dSpace = ( double ) i64RetVal.LowPart + + ( double ) i64RetVal.HighPart + ( double ) i64RetVal.HighPart * ( double ) 0xFFFFFFFF; - dSpace += ( double ) i64RetVal.LowPart; - + if( uiType == HB_DISK_USED ) { - dSpace -= ( double ) i64FreeBytes.HighPart + + dSpace -= ( double ) i64FreeBytes.LowPart + + ( double ) i64FreeBytes.HighPart + ( double ) i64FreeBytes.HighPart * ( double ) 0xFFFFFFFF; - dSpace -= ( double ) i64FreeBytes.LowPart; } #else @@ -189,17 +195,17 @@ HB_FUNC( DISKSPACE ) struct that is part of ULARGE_INTEGER [pt] */ - dSpace = ( double ) i64RetVal.u.HighPart + + dSpace = ( double ) i64RetVal.u.LowPart + + ( double ) i64RetVal.u.HighPart + ( double ) i64RetVal.u.HighPart * ( double ) 0xFFFFFFFF; - dSpace += ( double ) i64RetVal.u.LowPart; if( uiType == HB_DISK_USED ) { - dSpace -= ( double ) i64FreeBytes.u.HighPart + + dSpace -= ( double ) i64FreeBytes.u.LowPart + + ( double ) i64FreeBytes.u.HighPart + ( double ) i64FreeBytes.u.HighPart * ( double ) 0xFFFFFFFF; - dSpace -= ( double ) i64FreeBytes.u.LowPart; } #endif @@ -248,7 +254,19 @@ HB_FUNC( DISKSPACE ) SetErrorMode( uiErrMode ); if( GetLastError() != 0 ) - hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + { + USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY + with EF_CANDEFAULT above) + */ + + if( uiAction == E_RETRY ) + continue; + } + + break; } #else