From 17b21e996b89dfe3a15552a33d41f5420ec3d86e Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Sat, 27 Aug 2011 08:09:34 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 9 +++++ harbour/src/rtl/hbcom.c | 11 +++--- harbour/src/rtl/hbinet.c | 73 ++++++++++++++++------------------------ 3 files changed, 42 insertions(+), 51 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2286d1d5dd..272814ff68 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/src/rtl/hbcom.c b/harbour/src/rtl/hbcom.c index b1fb6d7779..cf3aa0bd81 100644 --- a/harbour/src/rtl/hbcom.c +++ b/harbour/src/rtl/hbcom.c @@ -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 ); diff --git a/harbour/src/rtl/hbinet.c b/harbour/src/rtl/hbinet.c index cdd83cd30b..ebd8aad624 100644 --- a/harbour/src/rtl/hbinet.c +++ b/harbour/src/rtl/hbinet.c @@ -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 ); } }