/* read data using stream structure */ long hb_znetRead( PHB_ZNETSTREAM pStream, HB_SOCKET sd, void * buffer, long len, HB_MAXINT timeout ) { long rec = 0; pStream->rd.next_out = ( Bytef * ) buffer; pStream->rd.avail_out = ( uInt ) len; pStream->err = Z_OK; while( pStream->rd.avail_out ) { if( pStream->rd.avail_in == 0 && pStream->err == Z_BUF_ERROR ) { if( pStream->skip_in ) { pStream->rd.next_in += pStream->skip_in; pStream->skip_in = 0; } if( pStream->crypt_in && pStream->rd.next_in > pStream->inbuf ) memmove( pStream->inbuf, pStream->rd.next_in, pStream->crypt_in ); pStream->rd.next_in = pStream->inbuf; if( ! pStream->crypt || pStream->crypt_in < 8 ) { if( pStream->rd.avail_out != ( uInt ) len ) timeout = 0; rec = hb_socketRecv( sd, pStream->inbuf + pStream->crypt_in, HB_ZNET_BUFSIZE - pStream->crypt_in, 0, timeout ); if( rec <= 0 ) break; } if( pStream->crypt ) { pStream->crypt_in += rec; if( pStream->crypt_size == 0 ) { if( pStream->crypt_in >= 8 ) { hb_znetDecrypt( pStream, pStream->rd.next_in ); pStream->crypt_size = HB_GET_BE_UINT16( pStream->rd.next_in ); pStream->rd.next_in += 2; pStream->crypt_in -= 8; rec = HB_MIN( pStream->crypt_size, 6 ); pStream->crypt_size -= ( uInt ) rec; pStream->rd.avail_in += ( uInt ) rec; pStream->skip_in = ( uInt ) ( 6 - rec ); rec = 0; } } if( pStream->skip_in == 0 ) { long l = ( pStream->crypt_size + 0x07 ) & ~0x07; rec = pStream->crypt_in & ~0x07; if( rec > l ) rec = l; /* decrypt the buffer */ for( l = 0; l < rec; l += 8 ) hb_znetDecrypt( pStream, pStream->rd.next_in + pStream->rd.avail_in + l ); pStream->crypt_in -= rec; if( ( uInt ) rec > pStream->crypt_size ) { pStream->skip_in = rec - pStream->crypt_size; rec = pStream->crypt_size; } pStream->crypt_size -= rec; } } pStream->rd.avail_in += ( uInt ) rec; if( pStream->rd.avail_in == 0 ) break; rec = 0; } pStream->err = inflate( &pStream->rd, Z_SYNC_FLUSH ); /* if( pStream->err == Z_STREAM_END && pStream->rd.avail_in == 0 ) pStream->err = Z_BUF_ERROR; */ if( pStream->err != Z_OK && ! ( pStream->err == Z_BUF_ERROR && pStream->rd.avail_in == 0 ) ) break; } len -= pStream->rd.avail_out; return len == 0 ? rec : len; }
int main( void ) { char buf[ 16 ]; int n, i, l, f, iRet = 0; printf( "\nStandard C types:\n" ); printf( "\t sizeof(void*)=%d\n", ( int ) sizeof( void * ) ); printf( "\t sizeof(char)=%d\n", ( int ) sizeof( char ) ); printf( "\t sizeof(short int)=%d\n", ( int ) sizeof( short int ) ); printf( "\t sizeof(int)=%d\n", ( int ) sizeof( int ) ); printf( "\t sizeof(long int)=%d\n", ( int ) sizeof( long int ) ); #if defined( HB_OS_WIN ) && ! defined( __GNUC__ ) printf( "\t sizeof(__int64)=%d\n", ( int ) sizeof( __int64 ) ); #else printf( "\tsizeof(long long int)=%d\n", ( int ) sizeof( long long int ) ); #endif printf( "\t sizeof(float)=%d\n", ( int ) sizeof( float ) ); printf( "\t sizeof(double)=%d\n", ( int ) sizeof( double ) ); printf( "\t sizeof(long double)=%d\n", ( int ) sizeof( long double ) ); printf( "\nHarbour types:\n" ); printf( "\t sizeof(HB_BYTE)=%d %s\n", ( int ) sizeof( HB_BYTE ), sizeof( HB_BYTE ) == 1 ? "OK" : "BAD" ); printf( "\t sizeof(HB_SHORT)=%d %s\n", ( int ) sizeof( HB_SHORT ), sizeof( HB_SHORT ) == 2 ? "OK" : "BAD" ); printf( "\t sizeof(HB_UINT)=%d %s\n", ( int ) sizeof( HB_UINT ), sizeof( HB_UINT ) == 4 || sizeof( HB_UINT ) == 8 ? "OK" : "BAD" ); printf( "\t sizeof(HB_LONG)=%d %s\n", ( int ) sizeof( HB_LONG ), sizeof( HB_LONG ) == 4 || sizeof( HB_LONG ) == 8 ? "OK" : "BAD" ); printf( "\tsizeof(HB_LONGLONG)=%d %s\n", ( int ) sizeof( HB_LONGLONG ), sizeof( HB_LONGLONG ) == 8 ? "OK" : "BAD" ); printf( "\t sizeof(double)=%d %s\n", ( int ) sizeof( double ), sizeof( double ) == 8 ? "OK" : "BAD" ); if( sizeof( HB_BYTE ) != 1 || sizeof( HB_SHORT ) != 2 || ( sizeof( HB_LONG ) != 4 && sizeof( HB_LONG ) != 8 ) || sizeof( HB_LONGLONG ) != 8 || sizeof( double ) != 8 ) iRet = 1; n = 0x31323334; memcpy( buf, &n, sizeof( n ) ); buf[ sizeof( n ) ] = '\0'; i = atoi( buf ); #if defined( HB_PDP_ENDIAN ) l = 2143; #elif defined( HB_BIG_ENDIAN ) l = 1234; #else l = 4321; #endif printf( "\nn=0x%x -> \"%s\" (%s endian) %s\n", n, buf, i == 1234 ? "big" : i == 2143 ? "pdp" : i == 4321 ? "little" : "unknown", i == l ? "OK" : "BAD" ); if( i != l ) iRet = 1; buf[ 0 ] = 0x12; buf[ 1 ] = 0x34; buf[ 2 ] = 0x56; buf[ 3 ] = 0x78; buf[ 4 ] = 0x65; i = ( HB_GET_BE_UINT32( buf ) == 0x12345678L && HB_GET_LE_UINT32( buf ) == 0x78563412L ); if( ! i ) iRet = 1; printf( "byte order translation: %s\n", i ? "OK" : "BAD" ); for( l = 0; l < 4; l++ ) { n = HB_GET_BE_UINT16( &buf[ l ] ); f = n == ( buf[ l ] * 256 + buf[ l + 1 ] ) ? 1 : 0; if( ! f ) iRet = 1; printf( "HB_GET_BE_UINT16(%x,%x) = %x -> %s\n", buf[ l ], buf[ l + 1 ], n, f ? "OK" : "BAD" ); n = HB_GET_LE_UINT16( &buf[ l ] ); f = n == ( buf[ l ] + 256 * buf[ l + 1 ] ) ? 1 : 0; if( ! f ) iRet = 1; printf( "HB_GET_LE_UINT16(%x,%x) = %x -> %s\n", buf[ l ], buf[ l + 1 ], n, f ? "OK" : "BAD" ); } n = ( char ) 255; printf( "n=%d -> (char) type is %ssigned\n", n, n < 0 ? "" : "un" ); if( iRet ) printf( "\nHarbour cannot be compiled !!!\n" ); else printf( "\nBasic test is correct, try to compile Harbour.\n" ); return iRet; }