diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0eb0e802ac..e11d07f2f8 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,32 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-05-06 21:33 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/src/rtl/Makefile + * harbour/src/rtl/hbznet.c + + harbour/src/rtl/hbinetz.c + * moved HB_INETCOMPRESS() function to separate file + + * harbour/include/hbexprb.c + ! fixed my very bad C&P typo (2010-02-04 19:14 UTC+0100) which caused + that dummy value was left on HVM stack after post decrementation used + as statement. This dummy value could break construciton like FOR EACH, + WITH OBJECT, BEGIN SEQUENCE. Here is self contain example which can + be used to exploit the problem: + proc main() + begin sequence + p() + end sequence + return + proc p() + local nTemp := 0 + begin sequence + nTemp-- + end sequence + return + Many thanks to Heinz Bergen who reduced his code to similar small + example. + 2010-05-06 09:52 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbqt/THbQtUI.prg + Added functionality for "WhatsThis" feature of Qt. diff --git a/harbour/include/hbexprb.c b/harbour/include/hbexprb.c index 7b489b4c0c..45f32c309f 100644 --- a/harbour/include/hbexprb.c +++ b/harbour/include/hbexprb.c @@ -2789,7 +2789,7 @@ static HB_EXPR_FUNC( hb_compExprUsePostDec ) case HB_EA_PUSH_POP: case HB_EA_STATEMENT: - hb_compExprPushPostOp( pSelf, HB_P_DEC, HB_COMP_PARAM ); + hb_compExprUsePreOp( pSelf, HB_P_DEC, HB_COMP_PARAM ); break; case HB_EA_DELETE: diff --git a/harbour/src/rtl/Makefile b/harbour/src/rtl/Makefile index 3610626f36..38486cefef 100644 --- a/harbour/src/rtl/Makefile +++ b/harbour/src/rtl/Makefile @@ -83,6 +83,7 @@ C_SOURCES := \ hbgtcore.c \ hbi18n1.c \ hbinet.c \ + hbinetz.c \ hbproces.c \ hbprocfn.c \ hbrandom.c \ diff --git a/harbour/src/rtl/hbinetz.c b/harbour/src/rtl/hbinetz.c new file mode 100644 index 0000000000..c3fd8de47a --- /dev/null +++ b/harbour/src/rtl/hbinetz.c @@ -0,0 +1,84 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * ZLIB compression for Harbour HB_INET*() connections + * + * Copyright 2010 Przemyslaw Czerpak + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" +#include "hbsocket.h" +#include "hbznet.h" +#include "hbzlib.ch" + +/* this function is intentionally not in hbinet.c to not create binding + * to ZLIB if user does not use it + */ +HB_FUNC( HB_INETCOMPRESS ) +{ + PHB_ITEM pItem = hb_param( 1, HB_IT_POINTER ); + int iLevel = hb_parnidef( 2, HB_ZLIB_COMPRESSION_DEFAULT ), + iStrategy = hb_parnidef( 3, HB_ZLIB_STRATEGY_DEFAULT ); + + if( iLevel == HB_ZLIB_COMPRESSION_DISABLE ) + hb_znetInetInitialize( pItem, NULL, NULL, NULL, NULL, NULL ); + else + { + PHB_ZNETSTREAM pStream = hb_znetOpen( iLevel, iStrategy ); + if( pStream == NULL ) + pItem = NULL; /* to force RTE */ + if( hb_znetInetInitialize( pItem, pStream, hb_znetRead, hb_znetWrite, + hb_znetFlush, hb_znetClose ) ) + { + int keylen = ( int ) hb_parclen( 4 ); + if( keylen ) + hb_znetEncryptKey( pStream, hb_parc( 4 ), keylen ); + } + else if( pStream ) + hb_znetClose( pStream ); + } +} diff --git a/harbour/src/rtl/hbznet.c b/harbour/src/rtl/hbznet.c index 754a116a00..cd386d31fa 100644 --- a/harbour/src/rtl/hbznet.c +++ b/harbour/src/rtl/hbznet.c @@ -409,31 +409,3 @@ long hb_znetWrite( PHB_ZNETSTREAM pStream, HB_SOCKET sd, const void * buffer, lo return len == 0 ? snd : len; } - -/* this function is intentionally not in hbinet.c to not create binding - * to ZLIB if user does not use it - */ -HB_FUNC( HB_INETCOMPRESS ) -{ - PHB_ITEM pItem = hb_param( 1, HB_IT_POINTER ); - int iLevel = hb_parnidef( 2, HB_ZLIB_COMPRESSION_DEFAULT ), - iStrategy = hb_parnidef( 3, HB_ZLIB_STRATEGY_DEFAULT ); - - if( iLevel == HB_ZLIB_COMPRESSION_DISABLE ) - hb_znetInetInitialize( pItem, NULL, NULL, NULL, NULL, NULL ); - else - { - PHB_ZNETSTREAM pStream = hb_znetOpen( iLevel, iStrategy ); - if( pStream == NULL ) - pItem = NULL; /* to force RTE */ - if( hb_znetInetInitialize( pItem, pStream, hb_znetRead, hb_znetWrite, - hb_znetFlush, hb_znetClose ) ) - { - int keylen = ( int ) hb_parclen( 4 ); - if( keylen ) - hb_znetEncryptKey( pStream, hb_parc( 4 ), keylen ); - } - else if( pStream ) - hb_znetClose( pStream ); - } -}