2014-11-24 22:38 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/rtl/hbrand.c
! fixed memory leak
* src/rtl/philes.c
! fixed number to handle casting
* src/rtl/version.c
! added missing break in switch statement
* src/rtl/hbsockhb.c
* formatting and protection against wrong parameter passed
to hb_socketGetHosts()
; above modifications borrowed from Viktor's branch with some small
modifications
* src/rtl/hbsocket.c
! always set pSockAddr and puiLen parameters passed to hb_socketAccept()
and hb_socketRecvFrom() functions
* formatting and comment syncing with Viktor's branch
This commit is contained in:
@@ -68,7 +68,7 @@ HB_FUNC( HB_RANDSTR )
|
||||
{
|
||||
void * data = hb_xgrab( len + 1 );
|
||||
hb_random_block( data, len );
|
||||
hb_retclen( ( char * ) data, len );
|
||||
hb_retclen_buffer( ( char * ) data, len );
|
||||
}
|
||||
else
|
||||
hb_retc_null();
|
||||
|
||||
@@ -536,10 +536,10 @@ int hb_socketListen( HB_SOCKET sd, int iBacklog )
|
||||
HB_SOCKET hb_socketAccept( HB_SOCKET sd, void ** pSockAddr, unsigned * puiLen, HB_MAXINT timeout )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( sd );
|
||||
HB_SYMBOL_UNUSED( pSockAddr );
|
||||
HB_SYMBOL_UNUSED( puiLen );
|
||||
HB_SYMBOL_UNUSED( timeout );
|
||||
hb_socketSetRawError( HB_SOCKET_ERR_INVALIDHANDLE );
|
||||
*pSockAddr = NULL;
|
||||
*puiLen = 0;
|
||||
return HB_NO_SOCKET;
|
||||
}
|
||||
|
||||
@@ -594,10 +594,10 @@ long hb_socketRecvFrom( HB_SOCKET sd, void * data, long len, int flags, void **
|
||||
HB_SYMBOL_UNUSED( data );
|
||||
HB_SYMBOL_UNUSED( len );
|
||||
HB_SYMBOL_UNUSED( flags );
|
||||
HB_SYMBOL_UNUSED( pSockAddr );
|
||||
HB_SYMBOL_UNUSED( puiSockLen );
|
||||
HB_SYMBOL_UNUSED( timeout );
|
||||
hb_socketSetRawError( HB_SOCKET_ERR_INVALIDHANDLE );
|
||||
*pSockAddr = NULL;
|
||||
*puiLen = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -2221,6 +2221,11 @@ HB_SOCKET hb_socketAccept( HB_SOCKET sd, void ** pSockAddr, unsigned * puiLen, H
|
||||
int ret, err;
|
||||
|
||||
hb_vmUnlock();
|
||||
if( pSockAddr && puiLen )
|
||||
{
|
||||
*pSockAddr = NULL;
|
||||
*puiLen = 0;
|
||||
}
|
||||
ret = hb_socketSelectRD( sd, timeout );
|
||||
if( ret > 0 )
|
||||
{
|
||||
@@ -2235,26 +2240,20 @@ HB_SOCKET hb_socketAccept( HB_SOCKET sd, void ** pSockAddr, unsigned * puiLen, H
|
||||
|
||||
if( ret > 0 )
|
||||
hb_socketSetBlockingIO( sd, HB_TRUE );
|
||||
if( pSockAddr && puiLen )
|
||||
if( newsd != HB_NO_SOCKET )
|
||||
{
|
||||
if( newsd == HB_NO_SOCKET )
|
||||
{
|
||||
*pSockAddr = NULL;
|
||||
*puiLen = 0;
|
||||
}
|
||||
else
|
||||
if( pSockAddr && puiLen )
|
||||
{
|
||||
*pSockAddr = memcpy( hb_xgrab( len + 1 ), &st.sa, len );
|
||||
*puiLen = ( unsigned ) len;
|
||||
}
|
||||
}
|
||||
/* it's not guarantied that socket returned by accept will use
|
||||
* blocking IO operations. On some systems it inherits blocking IO
|
||||
* from parent handler so we have to force blocking IO mode
|
||||
* explicitly.
|
||||
*/
|
||||
if( newsd != HB_NO_SOCKET )
|
||||
/* it's not guarantied that socket returned by accept will use
|
||||
* blocking IO operations. On some systems it inherits blocking
|
||||
* IO from parent handler so we have to force blocking IO mode
|
||||
* explicitly.
|
||||
*/
|
||||
hb_socketSetBlockingIO( newsd, HB_TRUE );
|
||||
}
|
||||
|
||||
hb_socketSetOsError( err );
|
||||
}
|
||||
@@ -2431,6 +2430,12 @@ long hb_socketRecvFrom( HB_SOCKET sd, void * data, long len, int flags, void **
|
||||
|
||||
hb_vmUnlock();
|
||||
|
||||
if( pSockAddr && puiSockLen )
|
||||
{
|
||||
*pSockAddr = NULL;
|
||||
*puiSockLen = 0;
|
||||
}
|
||||
|
||||
if( timeout >= 0 )
|
||||
{
|
||||
lReceived = hb_socketSelectRD( sd, timeout );
|
||||
@@ -2455,18 +2460,10 @@ long hb_socketRecvFrom( HB_SOCKET sd, void * data, long len, int flags, void **
|
||||
while( lReceived == -1 && HB_SOCK_IS_EINTR( iError ) &&
|
||||
hb_vmRequestQuery() == 0 );
|
||||
|
||||
if( pSockAddr && puiSockLen )
|
||||
if( lReceived != -1 && pSockAddr && puiSockLen )
|
||||
{
|
||||
if( lReceived == -1 )
|
||||
{
|
||||
*pSockAddr = NULL;
|
||||
*puiSockLen = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*pSockAddr = memcpy( hb_xgrab( salen + 1 ), &st.sa, salen );
|
||||
*puiSockLen = ( unsigned ) salen;
|
||||
}
|
||||
*pSockAddr = memcpy( hb_xgrab( salen + 1 ), &st.sa, salen );
|
||||
*puiSockLen = ( unsigned ) salen;
|
||||
}
|
||||
}
|
||||
hb_vmLock();
|
||||
@@ -2553,7 +2550,7 @@ int hb_socketSetNoDelay( HB_SOCKET sd, HB_BOOL fNoDelay )
|
||||
}
|
||||
|
||||
/* NOTE: For notes on Windows, see:
|
||||
http://paste.lisp.org/display/59751
|
||||
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740621.aspx
|
||||
[vszakats] */
|
||||
int hb_socketSetExclusiveAddr( HB_SOCKET sd, HB_BOOL fExclusive )
|
||||
{
|
||||
@@ -3243,7 +3240,7 @@ static void hb_socketArraySetInetAddr( PHB_ITEM pItem, HB_SIZE nPos,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if defined( HB_OS_WIN ) && !defined( SIOCGIFCONF )
|
||||
#if defined( HB_OS_WIN ) && ! defined( SIOCGIFCONF )
|
||||
static HB_SIZE hb_socketArrayFindInetAddr( const char * szAddr,
|
||||
PHB_ITEM pArray, HB_SIZE nPos )
|
||||
{
|
||||
@@ -3429,7 +3426,7 @@ PHB_ITEM hb_socketGetIFaces( int af, HB_BOOL fNoAliases )
|
||||
{
|
||||
char hwaddr[ 24 ];
|
||||
unsigned char * data;
|
||||
data = ( unsigned char * ) &pifr->ifr_hwaddr.sa_data[0];
|
||||
data = ( unsigned char * ) &pifr->ifr_hwaddr.sa_data[ 0 ];
|
||||
hb_snprintf( hwaddr, sizeof( hwaddr ),
|
||||
"%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
data[ 0 ], data[ 1 ], data[ 2 ],
|
||||
@@ -3441,7 +3438,7 @@ PHB_ITEM hb_socketGetIFaces( int af, HB_BOOL fNoAliases )
|
||||
{
|
||||
char hwaddr[ 24 ];
|
||||
unsigned char * data;
|
||||
data = ( unsigned char * ) &pifr->ifr_enaddr[0];
|
||||
data = ( unsigned char * ) &pifr->ifr_enaddr[ 0 ];
|
||||
hb_snprintf( hwaddr, sizeof( hwaddr ),
|
||||
"%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
data[ 0 ], data[ 1 ], data[ 2 ],
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
* hb_socketErrorString( [ nSocketErrror = hb_socketGetError() ] ) --> cError
|
||||
* hb_socketGetSockName( hSocket ) --> aAddr | NIL
|
||||
* hb_socketGetPeerName( hSocket ) --> aAddr | NIL
|
||||
* hb_socketOpen( [ nDomain = HB_SOCKET_AF_INET ] , [ nType = HB_SOCKET_PT_STREAM ], [ nProtocol = 0 ] ) --> hSocket
|
||||
* hb_socketOpen( [ nDomain = HB_SOCKET_AF_INET ], [ nType = HB_SOCKET_PT_STREAM ], [ nProtocol = 0 ] ) --> hSocket
|
||||
* hb_socketClose( hSocket ) --> lSuccess
|
||||
* hb_socketShutdown( hSocket, [ nMode = HB_SOCKET_SHUT_RDWR ] ) --> lSuccess
|
||||
* hb_socketBind( hSocket, aAddr ) --> lSuccess
|
||||
@@ -74,9 +74,9 @@
|
||||
* hb_socketGetSndBufSize( hSocket, @nValue ) --> lSuccess
|
||||
* hb_socketGetRcvBufSize( hSocket, @nValue ) --> lSuccess
|
||||
* hb_socketSetMulticast( hSocket, [ nFamily = HB_SOCKET_AF_INET ], cAddr ) --> lSuccess
|
||||
* hb_socketSelectRead( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelectWrite( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelectWriteEx( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelectRead( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelectWrite( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelectWriteEx( hSocket, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketSelect( aRead, lSetRead, aWrite, lSetWrite, aExcep, lSetExcep, [ nTimeout = FOREVER ] ) --> nRet
|
||||
* hb_socketResolveINetAddr( cAddr, nPort ) --> aAddr | NIL
|
||||
* hb_socketResolveAddr( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> cResolved
|
||||
@@ -640,7 +640,7 @@ HB_FUNC( HB_SOCKETRESOLVEADDR )
|
||||
if( szAddr )
|
||||
hb_retc_buffer( szAddr );
|
||||
else
|
||||
hb_retc( "" );
|
||||
hb_retc_null();
|
||||
}
|
||||
|
||||
HB_FUNC( HB_SOCKETGETHOSTNAME )
|
||||
@@ -663,28 +663,42 @@ HB_FUNC( HB_SOCKETGETHOSTNAME )
|
||||
|
||||
HB_FUNC( HB_SOCKETGETHOSTS )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
const char * szAddr = hb_parc( 1 );
|
||||
|
||||
socket_init();
|
||||
pItem = hb_socketGetHosts( hb_parc( 1 ), hb_parnidef( 2, HB_SOCKET_AF_INET ) );
|
||||
if( pItem )
|
||||
hb_itemReturnRelease( pItem );
|
||||
if( szAddr )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
socket_init();
|
||||
pItem = hb_socketGetHosts( szAddr, hb_parnidef( 2, HB_SOCKET_AF_INET ) );
|
||||
if( pItem )
|
||||
hb_itemReturnRelease( pItem );
|
||||
else
|
||||
hb_reta( 0 );
|
||||
}
|
||||
else
|
||||
hb_reta( 0 );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* This function is not implemented at C level, yet [Mindaugas] */
|
||||
HB_FUNC( HB_SOCKETGETALIASES )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
const char * szAddr = hb_parc( 1 );
|
||||
|
||||
socket_init();
|
||||
pItem = hb_socketGetAliases( hb_parc( 1 ), hb_parnidef( 2, HB_SOCKET_AF_INET ) );
|
||||
if( pItem )
|
||||
hb_itemReturnRelease( pItem );
|
||||
if( szAddr )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
socket_init();
|
||||
pItem = hb_socketGetAliases( szAddr, hb_parnidef( 2, HB_SOCKET_AF_INET ) );
|
||||
if( pItem )
|
||||
hb_itemReturnRelease( pItem );
|
||||
else
|
||||
hb_reta( 0 );
|
||||
}
|
||||
else
|
||||
hb_reta( 0 );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@ HB_FUNC( FREADSTR )
|
||||
|
||||
if( nToRead > 0 )
|
||||
{
|
||||
HB_FHANDLE fhnd = ( HB_FHANDLE ) hb_parni( 1 );
|
||||
HB_FHANDLE fhnd = hb_numToHandle( hb_parnint( 1 ) );
|
||||
char * buffer = ( char * ) hb_xgrab( nToRead + 1 );
|
||||
HB_SIZE nRead;
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ HB_FUNC( HB_VERSION )
|
||||
case HB_VERSION_FLAG_C: hb_retc_const( hb_verFlagsC() ); break;
|
||||
case HB_VERSION_FLAG_LINKER: hb_retc_const( hb_verFlagsL() ); break;
|
||||
case HB_VERSION_BITWIDTH: hb_retni( ( int ) sizeof( void * ) * 8 ); break;
|
||||
case HB_VERSION_MT: hb_retl( hb_vmIsMt() );
|
||||
case HB_VERSION_MT: hb_retl( hb_vmIsMt() ); break;
|
||||
|
||||
case HB_VERSION_SHARED:
|
||||
#if defined( HB_DYNLIB )
|
||||
|
||||
Reference in New Issue
Block a user