From 964e9a66953fb65aac83090daec9bc38469c404b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Fri, 31 Jul 2015 16:42:52 +0200 Subject: [PATCH] 2015-07-31 16:42 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/gtxwc/gtxwc.c * src/rtl/mlcfunc.c * pacified new GCC C++ warnings * src/rtl/hbsocket.c * do not execute select() if HVM exception was generated when socket handlers are extracted but return an error immediately --- ChangeLog.txt | 9 +++++++++ src/rtl/gtxwc/gtxwc.c | 4 ++-- src/rtl/hbsocket.c | 23 ++++++++++++++++++----- src/rtl/mlcfunc.c | 7 +++++-- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f3db6a93db..88443ec7c1 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,15 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2015-07-31 16:42 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * src/rtl/gtxwc/gtxwc.c + * src/rtl/mlcfunc.c + * pacified new GCC C++ warnings + + * src/rtl/hbsocket.c + * do not execute select() if HVM exception was generated when + socket handlers are extracted but return an error immediately + 2015-07-31 16:01 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/vm/asort.c % added new code for ASort() diff --git a/src/rtl/gtxwc/gtxwc.c b/src/rtl/gtxwc/gtxwc.c index 1152f9c8a7..db8244a426 100644 --- a/src/rtl/gtxwc/gtxwc.c +++ b/src/rtl/gtxwc/gtxwc.c @@ -3365,12 +3365,12 @@ static void hb_gt_xwc_WndProc( PXWND_DEF wnd, XEvent * evt ) } else if( req->target == s_atomTargets ) { - long aProp[] = { s_atomTimestamp, s_atomTargets, + Atom aProp[] = { s_atomTimestamp, s_atomTargets, s_atomString, s_atomUTF8String, s_atomText }; XChangeProperty( wnd->dpy, req->requestor, req->property, s_atomAtom, 32, PropModeReplace, - ( unsigned char * ) aProp, sizeof( aProp ) / sizeof( long ) ); + ( unsigned char * ) aProp, HB_SIZEOFARRAY( aProp ) ); } else if( req->target == s_atomString || req->target == s_atomText ) { diff --git a/src/rtl/hbsocket.c b/src/rtl/hbsocket.c index 1e9feb90be..3dea723c1e 100644 --- a/src/rtl/hbsocket.c +++ b/src/rtl/hbsocket.c @@ -2763,7 +2763,11 @@ static HB_SOCKET s_socketSelectCallback( PHB_ITEM pItem ) if( HB_IS_NUMERIC( pItem ) ) sd = ( HB_SOCKET ) hb_itemGetNInt( pItem ); else if( HB_IS_POINTER( pItem ) ) - sd = ( HB_SOCKET ) ( HB_PTRDIFF ) hb_itemGetPtr( pItem ); + { + sd = hb_socketItemGet( pItem ); + if( sd == HB_NO_SOCKET ) + sd = ( HB_SOCKET ) ( HB_PTRDIFF ) hb_itemGetPtr( pItem ); + } } return sd; } @@ -2823,10 +2827,19 @@ int hb_socketSelect( PHB_ITEM pArrayRD, HB_BOOL fSetRD, else ptv = NULL; - hb_vmUnlock(); - ret = select( ( int ) ( maxsd + 1 ), pfds[ 0 ], pfds[ 1 ], pfds[ 2 ], ptv ); - hb_socketSetOsError( ret == -1 ? HB_SOCK_GETERROR() : 0 ); - hb_vmLock(); + if( hb_vmRequestQuery() == 0 ) + { + hb_vmUnlock(); + ret = select( ( int ) ( maxsd + 1 ), pfds[ 0 ], pfds[ 1 ], pfds[ 2 ], ptv ); + hb_socketSetOsError( ret == -1 ? HB_SOCK_GETERROR() : 0 ); + hb_vmLock(); + } + else + { + hb_socketSetRawError( HB_SOCKET_ERR_INVALIDHANDLE ); + pSet[ 0 ] = pSet[ 1 ] = pSet[ 2 ] = HB_FALSE; + ret = -1; + } for( i = 0; i < 3; i++ ) { diff --git a/src/rtl/mlcfunc.c b/src/rtl/mlcfunc.c index 767f8a1e89..50f531ce53 100644 --- a/src/rtl/mlcfunc.c +++ b/src/rtl/mlcfunc.c @@ -390,8 +390,11 @@ HB_FUNC( MEMOLINE ) nCol = nIndex < MLC.nLen && ( MLC.pszString[ nIndex ] == ' ' || MLC.pszString[ nIndex ] == HB_CHAR_HT ) ? 1 : 0; - memset( szLine + nLen, ' ', nCol ); - nLen += nCol; + if( nCol > 0 ) + { + memset( szLine + nLen, ' ', nCol ); + nLen += nCol; + } } } hb_mlExit( &MLC );