diff --git a/ChangeLog.txt b/ChangeLog.txt index 0d4fb7666d..2cd0272984 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,10 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2017-05-10 07:55 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/hbwin/olecore.c + * minor modification in order of helper functions + 2017-05-10 07:50 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbwin/olecore.c * added additional protection to reduce hb_oleSafeArrayToString() diff --git a/contrib/hbwin/olecore.c b/contrib/hbwin/olecore.c index 49818e79a4..703a8ceff2 100644 --- a/contrib/hbwin/olecore.c +++ b/contrib/hbwin/olecore.c @@ -386,53 +386,6 @@ static IEnumVARIANT * hb_oleenumParam( int iParam ) } -static SAFEARRAY * hb_oleSafeArrayFromString( PHB_ITEM pItem, VARTYPE vt ) -{ - UINT cElements = ( UINT ) hb_itemGetCLen( pItem ); - SAFEARRAY * pSafeArray = SafeArrayCreateVector( vt, 0, cElements ); - - if( pSafeArray && cElements > 0 ) - { - void * pData; - if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK ) - { - memcpy( pData, hb_itemGetCPtr( pItem ), cElements ); - SafeArrayUnaccessData( pSafeArray ); - } - else - { - SafeArrayDestroy( pSafeArray ); - pSafeArray = NULL; - } - } - return pSafeArray; -} - - -static HB_BOOL hb_oleSafeArrayToString( PHB_ITEM pItem, SAFEARRAY * pSafeArray ) -{ - long lFrom, lTo; - VARTYPE vt; - - if( SafeArrayGetElemsize( pSafeArray ) == 1 && - SafeArrayGetVartype( pSafeArray, &vt ) == S_OK && - ( vt == VT_I1 || vt == VT_UI1 ) && - SafeArrayGetLBound( pSafeArray, 1, &lFrom ) == S_OK && - SafeArrayGetUBound( pSafeArray, 1, &lTo ) == S_OK && - lFrom <= lTo + 1 ) /* accept empty arrays */ - { - void * pData; - if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK ) - { - hb_itemPutCL( pItem, ( const char * ) pData, lTo - lFrom + 1 ); - SafeArrayUnaccessData( pSafeArray ); - return HB_TRUE; - } - } - return HB_FALSE; -} - - static VARIANT * hb_oleVariantParam( int iParam ) { VARIANT * pVariant = ( VARIANT * ) hb_parptrGC( &s_gcVariantFuncs, iParam ); @@ -506,6 +459,53 @@ static void hb_oleStringToItem( BSTR strVal, PHB_ITEM pItem ) } +static SAFEARRAY * hb_oleSafeArrayFromString( PHB_ITEM pItem, VARTYPE vt ) +{ + UINT cElements = ( UINT ) hb_itemGetCLen( pItem ); + SAFEARRAY * pSafeArray = SafeArrayCreateVector( vt, 0, cElements ); + + if( pSafeArray && cElements > 0 ) + { + void * pData; + if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK ) + { + memcpy( pData, hb_itemGetCPtr( pItem ), cElements ); + SafeArrayUnaccessData( pSafeArray ); + } + else + { + SafeArrayDestroy( pSafeArray ); + pSafeArray = NULL; + } + } + return pSafeArray; +} + + +static HB_BOOL hb_oleSafeArrayToString( PHB_ITEM pItem, SAFEARRAY * pSafeArray ) +{ + long lFrom, lTo; + VARTYPE vt; + + if( SafeArrayGetElemsize( pSafeArray ) == 1 && + SafeArrayGetVartype( pSafeArray, &vt ) == S_OK && + ( vt == VT_I1 || vt == VT_UI1 ) && + SafeArrayGetLBound( pSafeArray, 1, &lFrom ) == S_OK && + SafeArrayGetUBound( pSafeArray, 1, &lTo ) == S_OK && + lFrom <= lTo + 1 ) /* accept empty arrays */ + { + void * pData; + if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK ) + { + hb_itemPutCL( pItem, ( const char * ) pData, lTo - lFrom + 1 ); + SafeArrayUnaccessData( pSafeArray ); + return HB_TRUE; + } + } + return HB_FALSE; +} + + IDispatch * hb_oleItemGetDispatch( PHB_ITEM pItem ) { if( HB_IS_OBJECT( pItem ) )