From 95a9271e8de544f2b2dbf0012023e004fcf54efb Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Sat, 9 Aug 2008 15:55:31 +0000 Subject: [PATCH] 2008-08-09 17:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/vm/runner.c ! fixed HB_HRBGETFUNSYM() to respect only function symbols --- harbour/ChangeLog | 4 ++++ harbour/source/vm/runner.c | 19 +++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 07efa29f19..e2213af4fe 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,10 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-08-09 17:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/vm/runner.c + ! fixed HB_HRBGETFUNSYM() to respect only function symbols + 2008-08-09 17:52 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * doc/whatsnew.txt * include/hbextern.ch diff --git a/harbour/source/vm/runner.c b/harbour/source/vm/runner.c index edcf979d15..93311558f9 100644 --- a/harbour/source/vm/runner.c +++ b/harbour/source/vm/runner.c @@ -739,22 +739,21 @@ HB_FUNC( HB_HRBUNLOAD ) HB_FUNC( HB_HRBGETFUNSYM ) { PHRB_BODY pHrbBody = hb_hrbParam( 1 ); + char * szName = hb_parc( 2 ); - if( pHrbBody && hb_parclen( 2 ) > 0 ) + if( pHrbBody && szName ) { - char * szName = hb_strupr( hb_strdup( hb_parc( 2 ) ) ); - ULONG ulPos = 0; + PHB_SYMB pSym; + ULONG ulPos; - while( ulPos < pHrbBody->ulSymbols ) + for( ulPos = 0, pSym = pHrbBody->pSymRead; ulPos < pHrbBody->ulSymbols; ++pSym, ++ulPos ) { - if( !strcmp( szName, pHrbBody->pSymRead[ ulPos ].szName ) ) + if( pSym->value.pFunPtr != NULL && hb_stricmp( szName, pSym->szName ) == 0 ) + { + hb_itemPutSymbol( hb_stackReturnItem(), pSym ); break; - ulPos++; + } } - hb_xfree( szName ); - - if( ulPos < pHrbBody->ulSymbols ) - hb_itemPutSymbol( hb_stackReturnItem(), pHrbBody->pSymRead + ulPos ); } else hb_errRT_BASE( EG_ARG, 6106, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );