2011-08-27 10:09 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/src/rtl/hbinet.c
    % small simplification in error code setting

  * harbour/src/rtl/hbcom.c
    * always set explicitly tty device in raw mode even if cfmakeraw()
      exists to avoid potential problems with some platforms which
      may not make some necessary settings.
This commit is contained in:
Przemyslaw Czerpak
2011-08-27 08:09:34 +00:00
parent f9ff908030
commit 17b21e996b
3 changed files with 42 additions and 51 deletions

View File

@@ -16,6 +16,15 @@
The license applies to all entries newer than 2009-04-28.
*/
2011-08-27 10:09 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/hbinet.c
% small simplification in error code setting
* harbour/src/rtl/hbcom.c
* always set explicitly tty device in raw mode even if cfmakeraw()
exists to avoid potential problems with some platforms which
may not make some necessary settings.
2011-08-25 16:02 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbcuied/cu_object.prg
* contrib/hbcuied/cu_utlty.prg

View File

@@ -1092,18 +1092,15 @@ int hb_comInit( int iPort, int iBaud, int iParity, int iSize, int iStop )
hb_comSetOsError( pCom, iResult == -1 );
if( iResult == 0 )
{
#if defined( cfmakeraw )
#if defined( cfmakeraw ) || defined( HB_OS_LINUX )
/* Raw input from device */
cfmakeraw( &tio );
/* Reset data bits ( cfmakeraw() puts it to CS8 ) */
tia.c_cflag &= ~CSIZE;
#else
tio.c_iflag &= ~( IGNBRK | BRKINT | PARMRK | ISTRIP |
INLCR | IGNCR | ICRNL | IXON );
#endif
tio.c_iflag &= ~( IGNBRK | IGNPAR | BRKINT | PARMRK | ISTRIP |
INLCR | IGNCR | ICRNL | IXON | IXANY | IXOFF );
tio.c_oflag &= ~OPOST;
tio.c_lflag &= ~( ECHO | ECHONL | ICANON | ISIG | IEXTEN );
tio.c_cflag &= ~( CSIZE | PARENB );
#endif
/* Enable the receiver and set local mode... */
tio.c_cflag |= ( CLOCAL | CREAD );

View File

@@ -154,6 +154,13 @@ static int hb_inetCloseSocket( PHB_SOCKET_STRUCT socket )
return ret;
}
static void hb_inetGetError( PHB_SOCKET_STRUCT socket )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
static void hb_inetCloseStream( PHB_SOCKET_STRUCT socket )
{
if( socket->cleanFunc )
@@ -722,11 +729,8 @@ static void s_inetRecvInternal( int iMode )
if( iLen == 0 )
socket->iError = HB_INET_ERR_CLOSEDCONN;
else if( iLen < 0 )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
hb_inetGetError( socket );
hb_retni( iReceived > 0 ? iReceived : iLen );
}
}
@@ -839,11 +843,7 @@ static void s_inetRecvPattern( const char * const * patterns, int * patternsizes
if( iLen == 0 )
socket->iError = HB_INET_ERR_CLOSEDCONN;
else if( iLen < 0 )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
hb_inetGetError( socket );
else
{
socket->iError = HB_INET_ERR_BUFFOVERRUN;
@@ -950,7 +950,7 @@ HB_FUNC( HB_INETDATAREADY )
{
iVal = hb_socketSelectRead( socket->sd, hb_parnint( 2 ) /* default to 0 */ );
if( iVal < 0 )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
}
hb_retni( iVal );
}
@@ -1007,9 +1007,7 @@ static void s_inetSendInternal( HB_BOOL lAll )
}
else
{
socket->iError = hb_socketGetError();
if( iLen == -1 && socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
hb_inetGetError( socket );
break;
}
}
@@ -1128,7 +1126,7 @@ HB_FUNC( HB_INETSERVER )
hb_inetCloseSocket( socket );
socket->sd = hb_socketOpen( HB_SOCKET_PF_INET, HB_SOCKET_PT_STREAM, 0 );
if( socket->sd == HB_NO_SOCKET )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
else
{
int iPort = hb_parni( 1 );
@@ -1141,7 +1139,7 @@ HB_FUNC( HB_INETSERVER )
s_inetBind( socket, socket->remote, socket->remotelen ) != 0 ||
hb_socketListen( socket->sd, iListen ) != 0 )
{
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
hb_inetCloseSocket( socket );
}
else
@@ -1166,11 +1164,7 @@ HB_FUNC( HB_INETACCEPT )
HB_SOCKET incoming = hb_socketAccept( socket->sd, &sa, &len, socket->iTimeout );
if( incoming == HB_NO_SOCKET )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
hb_inetGetError( socket );
else
{
PHB_SOCKET_STRUCT new_socket;
@@ -1210,13 +1204,13 @@ static void hb_inetConnectInternal( HB_BOOL fResolve )
szHost = szAddr = hb_socketResolveAddr( szHost, HB_SOCKET_AF_INET );
if( fResolve && !szAddr )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
else
{
/* Creates comm socket */
socket->sd = hb_socketOpen( HB_SOCKET_PF_INET, HB_SOCKET_PT_STREAM, 0 );
if( socket->sd == HB_NO_SOCKET )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
else
{
if( socket->remote )
@@ -1227,12 +1221,12 @@ static void hb_inetConnectInternal( HB_BOOL fResolve )
hb_socketSetKeepAlive( socket->sd, HB_TRUE );
if( hb_socketConnect( socket->sd, socket->remote, socket->remotelen,
socket->iTimeout ) != 0 )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
else
socket->iError = HB_INET_ERR_OK;
}
else
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
}
if( szAddr )
hb_xfree( szAddr );
@@ -1278,7 +1272,7 @@ HB_FUNC( HB_INETDGRAMBIND )
socket->sd = hb_socketOpen( HB_SOCKET_PF_INET, HB_SOCKET_PT_DGRAM, HB_SOCKET_IPPROTO_UDP );
if( socket->sd == HB_NO_SOCKET )
{
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
hb_itemReturnRelease( pSocket );
return;
}
@@ -1294,13 +1288,13 @@ HB_FUNC( HB_INETDGRAMBIND )
szAddress, iPort ) ||
s_inetBind( socket, socket->remote, socket->remotelen ) != 0 )
{
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
hb_inetCloseSocket( socket );
}
else if( hb_pcount() >= 4 )
{
if( hb_socketSetMulticast( socket->sd, HB_SOCKET_PF_INET, hb_parc( 4 ) ) != 0 )
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
}
hb_itemReturnRelease( pSocket );
@@ -1317,7 +1311,7 @@ HB_FUNC( HB_INETDGRAM )
socket->sd = hb_socketOpen( HB_SOCKET_PF_INET, HB_SOCKET_PT_DGRAM, HB_SOCKET_IPPROTO_UDP );
if( socket->sd == HB_NO_SOCKET )
{
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
hb_itemReturnRelease( pSocket );
return;
}
@@ -1352,7 +1346,7 @@ HB_FUNC( HB_INETDGRAMSEND )
hb_xfree( socket->remote );
if( !hb_socketInetAddr( &socket->remote, &socket->remotelen, szAddress, iPort ) )
{
socket->iError = hb_socketGetError();
hb_inetGetError( socket );
iLen = -1;
}
else
@@ -1369,11 +1363,7 @@ HB_FUNC( HB_INETDGRAMSEND )
socket->remote, socket->remotelen,
socket->iTimeout );
if( iLen == -1 )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
hb_inetGetError( socket );
else
{
socket->iError = HB_INET_ERR_OK;
@@ -1432,16 +1422,11 @@ HB_FUNC( HB_INETDGRAMRECV )
}
while( fRepeat );
if( iMax == 0 )
socket->iError = HB_INET_ERR_CLOSEDCONN;
else if( iMax < 0 )
{
socket->iError = hb_socketGetError();
if( socket->iError == HB_SOCKET_ERR_TIMEOUT )
socket->iError = HB_INET_ERR_TIMEOUT;
}
if( iMax < 0 )
hb_inetGetError( socket );
else
socket->iError = HB_INET_ERR_OK;
socket->iError = iMax == 0 ? HB_INET_ERR_CLOSEDCONN : HB_INET_ERR_OK;
hb_retni( iMax );
}
}