From 4b7833ba1629ad63279e5480831454e5afe29977 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 27 Jul 2009 23:54:06 +0000 Subject: [PATCH] 2009-07-28 01:51 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * external/libhpdf/Makefile + Enabled for os2/watcom. * include/hbdefs.h * Minor addition to new type section. 'bool' is the new type for boolean, so maybe we should use them instead of hbBool/TRUE/FALSE. * source/rtl/hbsocket.c ! Added one 'static'. * Added one pair of paranthesis (formatting). * source/rtl/hbgtcore.c * source/rtl/hbsha1.c * contrib/hbwin/win_prt.c * Minor formatting. * contrib/xhb/xhbfunc.c + Added copyright holder for HB_F_EOF(). * contrib/hbssl/ssl.c ! Minor typo in comment. * contrib/hbssl/hbssl.h ! Added HB_EXTERN_BEGIN/HB_EXTERN_END. * config/global.cf + Added HB_UNIX_COMPATIBLE variable. + Setting default lib install dir to lib// on non-*nix systems. * examples/httpsrv/socket.c + Copied from uhttpd2. Please verify. --- harbour/ChangeLog | 35 +++ harbour/config/global.cf | 10 + harbour/contrib/hbssl/hbssl.h | 4 + harbour/contrib/hbssl/ssl.c | 2 +- harbour/contrib/hbwin/win_prt.c | 41 ++- harbour/contrib/xhb/xhbfunc.c | 11 + harbour/examples/httpsrv/socket.c | 476 +++++++++--------------------- harbour/external/libhpdf/Makefile | 3 + harbour/include/hbdefs.h | 7 + harbour/source/rtl/hbgtcore.c | 5 +- harbour/source/rtl/hbsha1.c | 2 - harbour/source/rtl/hbsocket.c | 6 +- 12 files changed, 238 insertions(+), 364 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ff8fe87f9a..ae68b40b1f 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,41 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-07-28 01:51 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * external/libhpdf/Makefile + + Enabled for os2/watcom. + + * include/hbdefs.h + * Minor addition to new type section. + 'bool' is the new type for boolean, so maybe we should + use them instead of hbBool/TRUE/FALSE. + + * source/rtl/hbsocket.c + ! Added one 'static'. + * Added one pair of paranthesis (formatting). + + * source/rtl/hbgtcore.c + * source/rtl/hbsha1.c + * contrib/hbwin/win_prt.c + * Minor formatting. + + * contrib/xhb/xhbfunc.c + + Added copyright holder for HB_F_EOF(). + + * contrib/hbssl/ssl.c + ! Minor typo in comment. + + * contrib/hbssl/hbssl.h + ! Added HB_EXTERN_BEGIN/HB_EXTERN_END. + + * config/global.cf + + Added HB_UNIX_COMPATIBLE variable. + + Setting default lib install dir to lib// + on non-*nix systems. + + * examples/httpsrv/socket.c + + Copied from uhttpd2. Please verify. + 2009-07-27 23:43 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbstack.h + added socket error codes to HB_IOERRORS diff --git a/harbour/config/global.cf b/harbour/config/global.cf index 9d70c92f02..41450df646 100644 --- a/harbour/config/global.cf +++ b/harbour/config/global.cf @@ -237,6 +237,12 @@ ifeq ($(HB_BUILD_VERBOSE),yes) endif endif +ifneq ($(findstring $(HB_ARCHITECTURE),win wce dos os2),) + HB_UNIX_COMPATIBLE := no +else + HB_UNIX_COMPATIBLE := yes +endif + ifneq ($(findstring $(HB_HOST_ARCH),win wce dos os2),) HB_HOST_BIN_EXT := .exe else @@ -362,6 +368,10 @@ ifneq ($(HB_DB_DRVEXT),) HB_DB_DIRS += $(HB_DB_DRVEXT) endif +ifeq ($(HB_UNIX_COMPATIBLE),no) + LIBPOSTFIX := $(DIRSEP)$(HB_ARHICTECTURE)$(DIRSEP)$(HB_COMPILER) +endif + ifeq ($(HB_BIN_INSTALL),) export HB_BIN_INSTALL := $(HB_INSTALL_PREFIX)$(DIRSEP)bin endif diff --git a/harbour/contrib/hbssl/hbssl.h b/harbour/contrib/hbssl/hbssl.h index 50ddf96483..d570bdd033 100644 --- a/harbour/contrib/hbssl/hbssl.h +++ b/harbour/contrib/hbssl/hbssl.h @@ -57,6 +57,8 @@ #include "hbssl.ch" +HB_EXTERN_BEGIN + extern SSL_METHOD * hb_ssl_method_id_to_ptr( int n ); extern void * hb_BIO_is( int iParam ); @@ -86,4 +88,6 @@ extern EVP_PKEY * hb_EVP_PKEY_par( int iParam ); extern char * hb_openssl_strdup( const char * pszText ); +HB_EXTERN_END + #endif /* HBSSL_H_ */ diff --git a/harbour/contrib/hbssl/ssl.c b/harbour/contrib/hbssl/ssl.c index ccdf7a980e..6d433c43eb 100644 --- a/harbour/contrib/hbssl/ssl.c +++ b/harbour/contrib/hbssl/ssl.c @@ -1449,7 +1449,7 @@ HB_FUNC( SSL_USE_PRIVATEKEY ) if( ssl ) /* QUESTION: It's unclear whether we should pass a copy here, - and who should free such passed EV_PKEY object. + and who should free such passed EVP_PKEY object. [vszakats] */ hb_retni( SSL_use_PrivateKey( ssl, hb_EVP_PKEY_par( 2 ) ) ); } diff --git a/harbour/contrib/hbwin/win_prt.c b/harbour/contrib/hbwin/win_prt.c index 2d3f295302..03ed641f12 100644 --- a/harbour/contrib/hbwin/win_prt.c +++ b/harbour/contrib/hbwin/win_prt.c @@ -57,36 +57,35 @@ #include - /* Waste some space ! */ static struct { - HANDLE Port; - LPCTSTR Name; + HANDLE Port; + LPCTSTR Name; } s_PortData[] = { - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM1" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM2" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM3" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM4" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM5" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM6" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM7" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM8" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM9" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM10" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM11" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM12" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM13" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM14" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM15" ) }, - { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM16" ) } + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM1" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM2" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM3" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM4" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM5" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM6" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM7" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM8" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM9" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM10" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM11" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM12" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM13" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM14" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM15" ) }, + { INVALID_HANDLE_VALUE, TEXT( "\\\\.\\COM16" ) } }; static struct { - DCB OldDCB; - COMMTIMEOUTS OldTimeouts; + DCB OldDCB; + COMMTIMEOUTS OldTimeouts; } s_PortData2[ 16 ]; diff --git a/harbour/contrib/xhb/xhbfunc.c b/harbour/contrib/xhb/xhbfunc.c index f7dffa8eb2..d13de85abf 100644 --- a/harbour/contrib/xhb/xhbfunc.c +++ b/harbour/contrib/xhb/xhbfunc.c @@ -50,6 +50,17 @@ * */ +/* + * The following parts are Copyright of the individual authors. + * www - http://www.harbour-project.org + * + * Copyright 2000 David G. Holm + * HB_F_EOF() + * + * See COPYING for licensing terms. + * + */ + #include "hbapi.h" #include "hbapifs.h" #include "hbapigt.h" diff --git a/harbour/examples/httpsrv/socket.c b/harbour/examples/httpsrv/socket.c index 4cea4b3488..48b117dade 100644 --- a/harbour/examples/httpsrv/socket.c +++ b/harbour/examples/httpsrv/socket.c @@ -2,15 +2,6 @@ * $Id$ */ -#include "hbapi.h" -#include "hbapiitm.h" - -#if defined( HB_OS_WIN ) - #define _WINSOCKAPI_ /* Prevents inclusion of winsock.h in windows.h */ - #define HB_SOCKET_T SOCKET - #include - #include - /* Function naming: @@ -51,382 +42,199 @@ other: { AF_?, cAddressDump } */ -#ifdef hb_parnidef -#undef hb_parnidef -#endif - +#include "hbsocket.h" +#include "hbapiitm.h" static int hb_parnidef( int iParam, int iValue ) { return HB_ISNUM( iParam ) ? hb_parni( iParam ) : iValue; } - -static SOCKET hb_parsocket( int iParam ) +static HB_SOCKET_T hb_parsocket( int iParam ) { - return HB_ISPOINTER( iParam ) ? ( SOCKET ) hb_parptr( 1 ) : INVALID_SOCKET; + return HB_ISPOINTER( iParam ) ? ( HB_SOCKET_T ) ( HB_PTRDIFF ) + hb_parptr( iParam ) : HB_NO_SOCKET; } - -static void hb_retsocket( SOCKET hSocket ) +static void hb_retsocket( HB_SOCKET_T hSocket ) { - if( hSocket == INVALID_SOCKET ) + if( hSocket == HB_NO_SOCKET ) hb_ret(); else - hb_retptr( ( void* ) hSocket ); + hb_retptr( ( void* ) ( HB_PTRDIFF ) hSocket ); } - -static SOCKET hb_itemGetSocket( PHB_ITEM pItem ) +static HB_SOCKET_T hb_itemGetSocket( PHB_ITEM pSocket ) { - return HB_IS_POINTER( pItem ) ? ( SOCKET ) hb_itemGetPtr( pItem ) : INVALID_SOCKET; -} - - -static PHB_ITEM hb_itemPutSocket( PHB_ITEM pItem, SOCKET hSocket ) -{ - if( ! pItem ) - pItem = hb_itemNew( NULL ); - - if( hSocket == INVALID_SOCKET ) - hb_itemClear( pItem ); + if( pSocket && HB_IS_POINTER( pSocket ) ) + return ( HB_SOCKET_T ) ( HB_PTRDIFF ) hb_itemGetPtr( pSocket ); else - hb_itemPutPtr( pItem, ( void* ) hSocket ); - - return pItem; + return HB_NO_SOCKET; } - -static void hb_itemGetSockaddr( PHB_ITEM pItem, struct sockaddr* sa ) +HB_FUNC( SOCKET_INIT ) { - memset( sa, 0, sizeof( struct sockaddr ) ); + hb_retni( hb_socketInit() ); +} - if( HB_IS_ARRAY( pItem ) ) +HB_FUNC( SOCKET_EXIT ) +{ + hb_socketCleanup(); +} + +HB_FUNC( SOCKET_ERROR ) +{ + hb_retni( hb_socketGetError() ); +} + +HB_FUNC( SOCKET_CREATE ) +{ + hb_retsocket( hb_socketOpen( hb_parnidef( 1, HB_SOCK_PF_INET ), + hb_parnidef( 2, HB_SOCK_STREAM ), + hb_parnidef( 3, HB_SOCK_IPPROTO_TCP ) ) ); +} + +HB_FUNC( SOCKET_CLOSE ) +{ + hb_retni( hb_socketClose( hb_parsocket( 1 ) ) ); +} + +HB_FUNC( SOCKET_BIND ) +{ + void * sa; + unsigned len; + + if( hb_socketAddrFromItem( &sa, &len, hb_param( 2, HB_IT_ANY ) ) ) { - sa->sa_family = hb_arrayGetNI( pItem, 1 ); - - if( sa->sa_family == AF_INET ) - { - ( ( struct sockaddr_in* ) sa)->sin_addr.S_un.S_addr = inet_addr( hb_arrayGetCPtr( pItem, 2 ) ); - ( ( struct sockaddr_in* ) sa)->sin_port = htons( hb_arrayGetNI( pItem, 3 ) ); - } - else - { - ULONG ulLen = hb_arrayGetCLen( pItem, 2 ); - - if( ulLen > sizeof( sa->sa_data ) ) - ulLen = sizeof( sa->sa_data ); - memcpy( sa->sa_data, hb_arrayGetCPtr( pItem, 2 ), ulLen ); - } + hb_retni( hb_socketBind( hb_parsocket( 1 ), sa, len ) ); + hb_xfree( sa ); } } - -static PHB_ITEM hb_itemPutSockaddr( PHB_ITEM pItem, const struct sockaddr* saddr ) +HB_FUNC( SOCKET_LISTEN ) { - pItem = hb_itemNew( pItem ); - - if( saddr->sa_family == AF_INET ) - { - hb_arrayNew( pItem, 3 ); - hb_arraySetNI( pItem, 1, saddr->sa_family ); - hb_arraySetC( pItem, 2, inet_ntoa( ( ( struct sockaddr_in* ) saddr )->sin_addr ) ); - hb_arraySetNI( pItem, 3, ntohs( ( ( struct sockaddr_in* ) saddr )->sin_port ) ); - } - else - { - hb_arrayNew( pItem, 2 ); - hb_arraySetNI( pItem, 1, saddr->sa_family ); - hb_arraySetCL( pItem, 2, saddr->sa_data, sizeof( saddr->sa_data ) ); - } - return pItem; + hb_retni( hb_socketListen( hb_parsocket( 1 ), hb_parnidef( 2, 10 ) ) ); } - -HB_FUNC ( SOCKET_INIT ) +HB_FUNC( SOCKET_ACCEPT ) { - WSADATA wsad; - - hb_retni( WSAStartup( hb_parnidef( 1, 257 ), &wsad ) ); - hb_storclen( (char*) &wsad, sizeof( WSADATA ), 2 ); -} - - -HB_FUNC ( SOCKET_EXIT ) -{ - hb_retni( WSACleanup() ); -} - - -HB_FUNC ( SOCKET_ERROR ) -{ - hb_retni( WSAGetLastError() ); -} - - -HB_FUNC ( SOCKET_CREATE ) -{ - hb_retsocket( socket( hb_parnidef( 1, PF_INET ), - hb_parnidef( 2, SOCK_STREAM ), - hb_parnidef( 3, IPPROTO_TCP ) ) ); -} - - -HB_FUNC ( SOCKET_CLOSE ) -{ - hb_retni( closesocket( hb_parsocket( 1 ) ) ); -} - - -HB_FUNC ( SOCKET_BIND ) -{ - struct sockaddr sa; - - hb_itemGetSockaddr( hb_param( 2, HB_IT_ANY ), &sa ); - hb_retni( bind( hb_parsocket( 1 ), &sa, sizeof( struct sockaddr ) ) ); -} - - -HB_FUNC ( SOCKET_LISTEN ) -{ - hb_retni( listen( hb_parsocket( 1 ), hb_parnidef( 2, 10 ) ) ); -} - - -HB_FUNC ( SOCKET_ACCEPT ) -{ - struct sockaddr saddr; - int iSize = sizeof( struct sockaddr ); - - hb_retsocket( accept( hb_parsocket( 1 ), &saddr, &iSize ) ); - if( HB_ISBYREF( 2 ) ) { - PHB_ITEM pItem = hb_itemPutSockaddr( NULL, &saddr ); - hb_itemParamStoreForward( 2, pItem ); - hb_itemRelease( pItem ); + void * sa; + unsigned len; + PHB_ITEM pItem; + + hb_retsocket( hb_socketAccept( hb_parsocket( 1 ), &sa, &len, + HB_ISNUM( 3 ) ? hb_parnint( 3 ) : -1 ) ); + pItem = hb_socketAddrToItem( sa, len ); + if( pItem ) + { + hb_itemParamStoreForward( 2, pItem ); + hb_itemRelease( pItem ); + } + else + hb_stor( 2 ); + + if( sa ) + hb_xfree( sa ); } + else + hb_retsocket( hb_socketAccept( hb_parsocket( 1 ), NULL, 0, + HB_ISNUM( 3 ) ? hb_parnint( 3 ) : -1 ) ); } - -HB_FUNC ( SOCKET_SHUTDOWN ) +HB_FUNC( SOCKET_SHUTDOWN ) { - hb_retni( shutdown( hb_parsocket( 1 ), hb_parnidef( 2, SD_BOTH ) ) ); + hb_retni( hb_socketShutdown( hb_parsocket( 1 ), + hb_parnidef( 2, HB_SOCK_SHUT_RDWR ) ) ); } - -HB_FUNC ( SOCKET_RECV ) +HB_FUNC( SOCKET_RECV ) { - int iLen, iRet; - char* pBuf; + char * pBuf; + long len; - iLen = hb_parni( 3 ); - - if( iLen > 65536 || iLen <= 0 ) - iLen = 4096; - - pBuf = ( char* ) hb_xgrab( ( ULONG ) iLen ); - iRet = recv( hb_parsocket( 1 ), pBuf, iLen, hb_parnidef( 4, 0 ) ); - hb_retni( iRet ); - hb_storclen( pBuf, iRet > 0 ? iRet : 0, 2 ); + len = hb_parni( 3 ); + if( len <= 0 ) + len = 4096; + pBuf = ( char* ) hb_xgrab( len + 1 ); + len = hb_socketRecv( hb_parsocket( 1 ), pBuf, len, hb_parni( 4 ), + HB_ISNUM( 5 ) ? hb_parnint( 5 ) : -1 ); + hb_retni( len ); + hb_storclen( pBuf, len > 0 ? len : 0, 2 ); hb_xfree( pBuf ); } - -HB_FUNC ( SOCKET_SEND ) +HB_FUNC( SOCKET_SEND ) { - hb_retni( send( hb_parsocket( 1 ), hb_parc( 2 ), hb_parclen( 2 ), hb_parnidef( 3, 0 ) ) ); + hb_retni( hb_socketSend( hb_parsocket( 1 ), hb_parc( 2 ), hb_parclen( 2 ), + hb_parni( 4 ), HB_ISNUM( 5 ) ? hb_parnint( 5 ) : -1 ) ); } - -HB_FUNC ( SOCKET_SELECT ) +HB_FUNC( SOCKET_GETSOCKNAME ) { - fd_set setread, setwrite, seterror; - BOOL bRead = 0, bWrite = 0, bError = 0; - struct timeval tv; - SOCKET socket, maxsocket; - PHB_ITEM pArray, pItem; - ULONG ulLen, ulIndex, ulCount; - LONG lTimeout; - int iRet; - - - FD_ZERO( &setread ); - FD_ZERO( &setwrite ); - FD_ZERO( &seterror ); - - maxsocket = (SOCKET) 0; - - pArray = hb_param( 1, HB_IT_ARRAY ); - if( pArray ) - { - ulLen = hb_arrayLen( pArray ); - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - bRead = 1; - FD_SET( socket, &setread ); - if( socket > maxsocket ) - maxsocket = socket; - } - } - } - - pArray = hb_param( 2, HB_IT_ARRAY ); - if( pArray ) - { - ulLen = hb_arrayLen( pArray ); - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - bWrite = 1; - FD_SET( socket, &setwrite ); - if( socket > maxsocket ) - maxsocket = socket; - } - } - } - - pArray = hb_param( 3, HB_IT_ARRAY ); - if( pArray ) - { - ulLen = hb_arrayLen( pArray ); - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - bError = 1; - FD_SET( socket, &seterror ); - if( socket > maxsocket ) - maxsocket = socket; - } - } - } - - /* Default forever */ - lTimeout = HB_ISNUM( 4 ) ? hb_parnl( 4 ) : -1; - - if( lTimeout == -1 ) - { - iRet = select( maxsocket + 1, bRead ? &setread : NULL, bWrite ? &setwrite: NULL, - bError ? &seterror : NULL, NULL ); - } - else - { - tv.tv_sec = lTimeout / 1000; - tv.tv_usec = ( lTimeout % 1000 ) * 1000; - iRet = select( maxsocket + 1, bRead ? &setread : NULL, bWrite ? &setwrite: NULL, - bError ? &seterror : NULL, &tv ); - } - - pArray = hb_param( 1, HB_IT_ARRAY ); - if( pArray && HB_ISBYREF( 1 ) ) - { - ulLen = hb_arrayLen( pArray ); - pItem = hb_itemNew( NULL ); - hb_arrayNew( pItem, ulLen ); - ulCount = 0; - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - if( FD_ISSET( socket, &setread ) ) - { - hb_arraySetForward( pItem, ++ulCount, hb_itemPutSocket( NULL, socket ) ); - } - } - } - hb_itemParamStoreForward( 1, pItem ); - } - - pArray = hb_param( 2, HB_IT_ARRAY ); - if( pArray && HB_ISBYREF( 2 ) ) - { - ulLen = hb_arrayLen( pArray ); - pItem = hb_itemNew( NULL ); - hb_arrayNew( pItem, ulLen ); - ulCount = 0; - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - if( FD_ISSET( socket, &setwrite ) ) - { - hb_arraySetForward( pItem, ++ulCount, hb_itemPutSocket( NULL, socket ) ); - } - } - } - hb_itemParamStoreForward( 2, pItem ); - } - - pArray = hb_param( 3, HB_IT_ARRAY ); - if( pArray && HB_ISBYREF( 3 ) ) - { - ulLen = hb_arrayLen( pArray ); - pItem = hb_itemNew( NULL ); - hb_arrayNew( pItem, ulLen ); - ulCount = 0; - for( ulIndex = 1; ulIndex <= ulLen; ulIndex++ ) - { - socket = hb_itemGetSocket( hb_arrayGetItemPtr( pArray, ulIndex ) ); - if( socket != INVALID_SOCKET ) - { - if( FD_ISSET( socket, &seterror ) ) - { - hb_arraySetForward( pItem, ++ulCount, hb_itemPutSocket( NULL, socket ) ); - } - } - } - hb_itemParamStoreForward( 3, pItem ); - } + void * sa; + unsigned len; + int iRet; + iRet = hb_socketGetSockName( hb_parsocket( 1 ), &sa, &len ); hb_retni( iRet ); -} - - -HB_FUNC ( SOCKET_GETSOCKNAME ) -{ - struct sockaddr saddr; - int iSize = sizeof( struct sockaddr ); - - hb_retni( getsockname( hb_parsocket( 1 ), &saddr, &iSize ) ); if( HB_ISBYREF( 2 ) ) { - PHB_ITEM pItem = hb_itemPutSockaddr( NULL, &saddr ); - hb_itemParamStoreForward( 2, pItem ); - hb_itemRelease( pItem ); + PHB_ITEM pItem = hb_socketAddrToItem( sa, len ); + if( pItem ) + { + hb_itemParamStoreForward( 2, pItem ); + hb_itemRelease( pItem ); + } + else + hb_stor( 2 ); + } + if( sa ) + hb_xfree( sa ); +} + +HB_FUNC( SOCKET_GETPEERNAME ) +{ + void * sa; + unsigned len; + int iRet; + + iRet = hb_socketGetPeerName( hb_parsocket( 1 ), &sa, &len ); + hb_retni( iRet ); + if( HB_ISBYREF( 2 ) ) + { + PHB_ITEM pItem = hb_socketAddrToItem( sa, len ); + if( pItem ) + { + hb_itemParamStoreForward( 2, pItem ); + hb_itemRelease( pItem ); + } + else + hb_stor( 2 ); + } + if( sa ) + hb_xfree( sa ); +} + +HB_FUNC( SOCKET_CONNECT ) +{ + void * sa; + unsigned len; + + if( hb_socketAddrFromItem( &sa, &len, hb_param( 2, HB_IT_ANY ) ) ) + { + hb_retni( hb_socketConnect( hb_parsocket( 1 ), sa, len, + HB_ISNUM( 3 ) ? hb_parnint( 3 ) : -1 ) ); + hb_xfree( sa ); } } - -HB_FUNC ( SOCKET_GETPEERNAME ) +HB_FUNC( SOCKET_SELECT ) { - struct sockaddr saddr; - int iSize = sizeof( struct sockaddr ); - - hb_retni( getpeername( hb_parsocket( 1 ), &saddr, &iSize ) ); - if( HB_ISBYREF( 2 ) ) - { - PHB_ITEM pItem = hb_itemPutSockaddr( NULL, &saddr ); - hb_itemParamStoreForward( 2, pItem ); - hb_itemRelease( pItem ); - } + hb_retni( hb_socketSelect( hb_param( 1, HB_IT_ARRAY ), HB_ISBYREF( 1 ), + hb_param( 2, HB_IT_ARRAY ), HB_ISBYREF( 2 ), + hb_param( 3, HB_IT_ARRAY ), HB_ISBYREF( 3 ), + HB_ISNUM( 4 ) ? hb_parnint( 4 ) : -1, + hb_itemGetSocket ) ); } - - -HB_FUNC ( CONNECT ) -{ - struct sockaddr sa; - - hb_itemGetSockaddr( hb_param( 2, HB_IT_ANY ), &sa ); - hb_retni( connect( hb_parsocket( 1 ), &sa, sizeof( struct sockaddr ) ) ); -} - -#endif diff --git a/harbour/external/libhpdf/Makefile b/harbour/external/libhpdf/Makefile index 33a202929c..b14ff9a4b6 100644 --- a/harbour/external/libhpdf/Makefile +++ b/harbour/external/libhpdf/Makefile @@ -25,6 +25,9 @@ ifeq ($(HB_COMPILER),mingwarm) HB_WITH_LIBHPDF=yes HB_USER_CFLAGS += -U__COREDLL__ endif +ifeq ($(HB_ARCHITECTURE),os2) +HB_WITH_LIBHPDF=yes +endif endif diff --git a/harbour/include/hbdefs.h b/harbour/include/hbdefs.h index 52c4664f2a..2e6138ba03 100644 --- a/harbour/include/hbdefs.h +++ b/harbour/include/hbdefs.h @@ -690,6 +690,13 @@ typedef unsigned long HB_COUNTER; /* Harbour overloaded types: */ +/* http://www.opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html + http://www.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html */ + +/* TODO: hbBool -> bool + hbFALSE / FALSE -> false + hbTRUE / TRUE -> true */ + #define hbFALSE 0 #define hbTRUE (!0) diff --git a/harbour/source/rtl/hbgtcore.c b/harbour/source/rtl/hbgtcore.c index bdae92a9ea..d732a689c2 100644 --- a/harbour/source/rtl/hbgtcore.c +++ b/harbour/source/rtl/hbgtcore.c @@ -2058,7 +2058,7 @@ static void hb_gt_def_SemiCold( PHB_GT pGT ) { int i; for( i = 0; i < pGT->iHeight; ++i ) - pGT->pLines[ i ] = FALSE; + pGT->pLines[ i ] = FALSE; pGT->fRefresh = FALSE; } @@ -2410,9 +2410,7 @@ static void hb_gt_def_InkeyPoll( PHB_GT pGT ) * necessary due to different low level GT behavior on some platforms */ if( hb_setGetTypeAhead() ) - { hb_gt_def_InkeyPollDo( pGT ); - } } /* Return the next key without extracting it */ @@ -2560,6 +2558,7 @@ static void hb_gt_def_InkeyExit( PHB_GT pGT ) hb_xfree( pGT->StrBuffer ); pGT->StrBuffer = NULL; } + if( pGT->inkeyBufferSize > HB_DEFAULT_INKEY_BUFSIZE ) { hb_xfree( pGT->inkeyBuffer ); diff --git a/harbour/source/rtl/hbsha1.c b/harbour/source/rtl/hbsha1.c index 58a6b7faaf..cdde7b5f49 100644 --- a/harbour/source/rtl/hbsha1.c +++ b/harbour/source/rtl/hbsha1.c @@ -71,6 +71,4 @@ HB_FUNC( HB_SHA1 ) } else hb_retclen( ( char * ) digest, sizeof( digest ) ); - - return; } diff --git a/harbour/source/rtl/hbsocket.c b/harbour/source/rtl/hbsocket.c index 519dc1b112..d40bb9e97e 100644 --- a/harbour/source/rtl/hbsocket.c +++ b/harbour/source/rtl/hbsocket.c @@ -201,7 +201,7 @@ #include "hbdate.h" /* TODO change error description to sth more user friendly */ -const char * s_socketErrors[] = { +static const char * s_socketErrors[] = { "OK", "EPIPE", "ETIMEOUT", @@ -669,7 +669,7 @@ static int s_iSessions; static const char * hb_inet_ntoa( struct in_addr * addr, char * pBuffer ) { /* dirty hack to make inet_ntoa() MT safe, - * in many systems inet_ntoa() returns pointer to + * in many systems inet_ntoa() returns pointer to * static buffer and is not MT safe. */ ULONG u = ntohl( addr->s_addr ); @@ -1856,7 +1856,7 @@ int hb_socketClose( HB_SOCKET_T sd ) #if defined( HB_OS_WIN ) ret = closesocket( sd ); #else -# if defined EINTR +# if defined( EINTR ) /* ignoring EINTR in close() it's quite common bug when sockets or * pipes are used. Without such protection it's not safe to use * signals in user code.