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:
Przemysław Czerpak
2014-11-24 22:38:41 +01:00
parent e40475da0d
commit 625eb81d3e
6 changed files with 86 additions and 53 deletions

View File

@@ -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();

View File

@@ -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 ],

View File

@@ -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

View File

@@ -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;

View File

@@ -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 )