* harbour/src/common/hbgete.c
* harbour/src/common/hbffind.c
* harbour/src/common/hbfsapi.c
* harbour/src/rtl/fstemp.c
* harbour/src/rtl/filesys.c
* harbour/src/rtl/diskspac.c
* harbour/src/rtl/disksphb.c
* harbour/src/rtl/net.c
! fixed memory leak reported by Pritpal
* cleanup some UNICODE conversions in Windows builds (mostly resolved
some macros when UNICODE macro is also explicitly used and cleaned
some buffers length passed to windows functions.
* removed unnecessary casting - if it's not necessary for some strange
reasons never cast strings to LP[C][TW]STR calling windows functions.
Such casting does not make any conversions but only hides potential
bugs.
* harbour/contrib/hbwin/axcore.c
* pacified warning
* harbour/src/rtl/gtxwc/gtxwc.c
* use XSetWMName() instead of XStoreName() to set window title
using UTF8 strings
* harbour/include/hbapigt.h
* always declare hb_gtIsGtRef() for C++ compiler
* harbour/src/vm/hashes.c
! use hb_gcMark() instead of hb_gcItemRef() to mark unlocked item
* harbour/src/vm/garbage.c
* moved hb_itemClear() from hb_gcGripDrop() to hb_gcGripRelease()
Now items are freed in the same way as any other GC blocks and
hb_gcGripDrop() is simple wrapper to hb_gcRefFree()
* harbour/src/vm/hvm.c
* harbour/src/vm/thread.c
! unlock item which stores thread return value to eliminate possible
memory leaks, i.e. when thread returns its own pointer item.
! unlock item which stores notify messages to eliminate possible
memory leaks, i.e. when mutex is used as notify value in its
own message queue.
* harbour/include/hbapigt.h
* harbour/include/hbgtcore.h
* harbour/src/rtl/hbgtcore.c
* harbour/src/vm/garbage.c
+ added new GT method MARK() executed by GC to mark all internall
GC blocks as used.
+ added hb_gtIsGtRef() internal function
! unlock internal GT items (pCargo, pNotifierBlock, pMutex) to
eliminate possible memory leaks, i.e. when pGT item is stored
in it's own cargo value or is accessed from notifier codeblock
* harbour/src/rtl/hbbffnc.c
+ added support for 3-rd parameter <lRaw> in hb_blowfishEncrypt() and
hb_blowfishDecrypt() functions. It disables ANSI X.923 padding but
encode passed string in 8bytes blocks. If last block in string is
smaller then it's padded to 8 bytes using chr(0) and information
about original string size is not attached to encrypted data.
During decoding only strings which are well padded (N*8 bytes) are
accepted and <lRaw> := .T. disables restoring original string size
encoded in encrypted string using ANSI X.923 standard so the size
of decrypted string is the same as original one.
* harbour/src/rtl/hbbffnc.c
* added note about padding standard - thanks to Mindaugas for information
* harbour/contrib/rddsql/sddfb/fbirddd.c
* pacified strict alignment warnings
* harbour/contrib/hbmemio/memio.c
* pacified warning
* harbour/src/rdd/dbfnsx/dbfnsx1.c
! fixed bug reported by Jaroslav Janik (many thanks) - if index FOR
expression excluded all records from non empty table then root page
was not initialized and DBFNSX generated corruption RTE.
* harbour/utils/hbi18n/hbi18n.prg
* set default GT to CGI
* harbour/src/common/hbgete.c
! fixed memory leak in non UNICODE Windows hb_getenv_buffer()
! add C stack buffers to eliminate memory allocation in UNICODE
Windows hb_getenv_buffer() - they are used if envvar name and
passed buffer are not too large. It fixes HB_FM_STATISTICS
Windows builds.
* harbour/contrib/hbwin/wapi_winuser.c
+ added WAPI_DESTROYWINDOW function
* harbour/contrib/xhb/traceprg.prg
* harbour/contrib/xhb/hbcompat.ch
! fixed typo in TraceLog() condition - was always disabled
+ added emulation for xHarbour Set( _SET_TRACE* [, <params,...> ] )
settings
* harbour/src/vm/hvmall.c
! define _GNU_SOURCE to fix compilation with HB_FM_DL_ALLOC in Linux
builds
* harbour/include/hbdefs.h
* declare HB_FOFFSET as LONG instead of LONGLONG on platforms where
LONG is 64bit integer to be compatible with C RTL file API
* harbour/src/vm/maindllh.c
* harbour/src/vm/maindllp.c
* harbour/contrib/hbct/ctstr.c
! casting in HB_TRACE() massages
* harbour/include/hbapi.h
* harbour/include/hbapiitm.h
* harbour/src/vm/arrays.c
* harbour/src/vm/hashes.c
* harbour/src/vm/itemapi.c
+ added hb_arrayCloneTo(), hb_hashCloneTo(), hb_itemCloneTo()
* harbour/src/vm/arrayshb.c
* harbour/src/vm/classes.c
* harbour/src/vm/hashes.c
* harbour/src/vm/hashfunc.c
* harbour/src/vm/hvm.c
% use hb_*CloneTo() instead of hb_*Clone()
* harbour/include/hbapi.h
* harbour/src/vm/garbage.c
- removed hb_gcRegisterSweep() function and support for user defined
sweep mark functions in GC blocks
- removed hb_gcAlloc() function
+ added new function hb_gcAllocate() which work in similar way to removed
hb_gcAlloc() function but it accepts as second parameter HB_GC_FUNCS
structure instead of HB_GARBAGE_FUNC_PTR and returned GC blocks are
locked so programmer does not have to worry that they can be removed
by GC.
+ added new internal function hb_gcAllocRaw() which works like
hb_gcAllocate() but returned GC blocks are not locked. They can
be used only in HVM in places well known that cannot activate
automatic GC scan. It should not be used by 3-rd party code.
* harbour/include/hbapi.h
* harbour/include/hbapiitm.h
* harbour/src/vm/extend.c
* harbour/src/vm/itemapi.c
* modified hb_parptrGC(), hb_parvptrGC(), hb_arrayGetPtrGC(),
hb_itemGetPtrGC() functions to use HB_GC_FUNCS structure instead
of HB_GARBAGE_FUNC_PTR
* modified hb_itemPutPtrGC() and indirectly related functions like
hb_arraySetPtrGC() or hb_stor[v]ptrGC() to automatically unlock
passed GC block just after attaching to known HVM item.
* harbour/include/hbregex.h
* harbour/src/rtl/hbregexc.c
* declare GC block detractor as static function
+ added hb_regexIs() function
* updated to work with new GC API
* removed unnecessary in new GC API hb_gcLock() call - GC blocks
allocated by hb_gcAllocate() are already locked and they mustn't
be locked explicitly by programmer (until he does not exactly knows
what he does ;))
* harbour/src/rtl/hbregex.c
* use hb_regexIs() instead of using regex GC destructor
* removed unnecessary in new GC API hb_gcUnlock() call - GC blocks
stored in HB_IT_POINTER item are automatically unlocked
* harbour/src/rtl/hbinet.c
* harbour/contrib/hbcurl/hbcurl.c
* updated to work with new GC API
% unlock items storing callback codeblocks and use GC mark functions
to mark them as used in GC passes
* harbour/src/pp/pplib.c
* harbour/src/vm/runner.c
* harbour/src/vm/codebloc.c
* harbour/src/vm/hashes.c
* harbour/src/vm/hvm.c
* harbour/src/vm/arrays.c
* harbour/src/vm/thread.c
* harbour/src/vm/dynlibhb.c
* harbour/src/rtl/hbzlibgz.c
* harbour/src/rtl/hbregex.c
* harbour/src/rtl/hbregexc.c
* harbour/src/rtl/hbgtcore.c
* harbour/src/rtl/hbi18n1.c
* harbour/src/rdd/wacore.c
* harbour/contrib/hbsqlit3/hbsqlit3.c
* harbour/contrib/hbnetio/netiosrv.c
* harbour/contrib/hbmzip/hbmzip.c
* harbour/contrib/hbhpdf/harupdf.c
* harbour/contrib/hbwin/olecore.c
* harbour/contrib/hbwin/win_prn1.c
* harbour/contrib/hbwin/win_dll.c
* updated code which was using hb_gcAlloc() to work with new GC API.
* harbour/contrib/hbwin/axcore.c
* updated syntax description
TODO: update contrib code: hbqt, hbssl, ... to work with new GC API.
I would like to ask authors of above libraries to do it.
TODO: defined when and how we should free AX control and user callback
handler and update AX code to respect new definition
* harbour/src/rtl/hbini.prg
! fixed stripping last character when the last line in ini file
does not contain valid EOL - thanks to Mario H. Sabado for information
about the problem
* harbour/src/rtl/dateshb.c
! fixed HB_TTOD() and HB_DTOT() results - they were reverted by mistake
+ added support for optional second parameter in HB_DTOT() function with
time as numeric value in second() like representation or as character
string with HH:MM[:S[S][.f[f[f[f]]]]] [PM|AM] representation, i.e.:
? HB_DATETIME()
? HB_DTOT( date(), seconds() )
? HB_DTOT( date(), time() )
+ added support for optional second parameter passed by reference in
HB_TTOD() function. If given then this functions stores in it number
of seconds in given day specified by timestamp value, i.e.:
dDate := HB_TTOD( HB_DATETIME(), @nSec )
gives similar functionality to:
dDate := date()
nSec := seconds()
+ added support for optional 3-rd parameter in HB_TTOD() functions
with timestamp format. If given then this function stores time
part in second parameter as formatted string value. For empty
string _SET_TIMEFORMAT is used, i.e.:
dDate := HB_TTOD( HB_DATETIME(), @cTime, "hh:mm:ss" )
* harbour/src/common/hbwince.c
+ added GetEnvironmentVariableW() - it fixes WinCE builds after recent
ANSI to UNICODE function conversions. In WINCE such functions do not
exist.
* harbour/src/rtl/gtclip.c
* pacified MinGWCE warnings
* harbour/src/rtl/dateshb.c
+ added HB_TTOD() and HB_DTOT() functions
* harbour/src/rtl/cdpapi.c
* harbour/include/hbapicdp.h
+ added new functions: hb_cdpStrnToU16LE() and hb_cdpStringInU16Length()
* harbour/contrib/rddads/rddads.h
! define (if not defined) x64 macro in all 64bit builds not only for
MinGW64
* define (if not defined) unix macro in all HB_OS_UNIX builds not only
for Linux. TOCHECK: CygWIN builds.
* harbour/src/rtl/Makefile
+ harbour/src/rtl/hbbfish.c
* harbour/include/Makefile
+ harbour/include/hbbfish.h
+ added support for BlowFish encryption at C level:
hb_blowfishInit(), hb_blowfishEncrypt(), hb_blowfishDecrypt()
This code implements BlowFish algorithm designed by Bruce Schneier.
The description of BlowFish algorithm can be found at:
http://www.schneier.com/paper-blowfish-fse.html
This code uses for initial s-boxes and p-array values PI hex digits
taken from tables public at:
http://www.schneier.com/blowfish.html
which can be downloaded from:
http://www.schneier.com/code/constants.txt
This should be quite fast implementation (probably much faster
then reference one) but please remember that in BlowFish algorithm
startup initialization of encryption tables is intentionally
designed to be expensive to strongly reduce the efficiency of
brute force attacks so call hb_blowfishInit() once for each
new password and then reuse initialized encryption tables in
hb_blowfishEncrypt() and hb_blowfishDecrypt().
I'll add .prg functions later.
TODO: add some asymmetric key encryption.
* src/common/hbver.c
* src/rtl/fstemp.c
* contrib/hbwin/win_prn2.c
+ Changed to use native instead of fixed ANSI version of win API calls.
; Please review me, all these are critical low level functions,
so any mistakes can be deadly.
; TODO: Remaining dynamic versions, although maybe for dynamically
loaded win API functions it's better to stay with ANSI
version for compatibility.
* src/rtl/filesys.c
! hb_fsIsDrv() changed on win platform to use GetLogicalDrives() API
instead of GetDriveTypeA(). This should fix existing TOFIX.
Thanks for Saulius Zrelskis for the suggestion.
I'd like to ask users to make side-by-side comparisons with
CA-Cl*pper to see if we're compatible.
! Fixed hb_fsIsDrv() on non-win platforms to always set
internal error to zero. CA-Cl*pper does the same.
* harbour/src/rtl/hbini.prg
* Changed hb_IniString() function name to hb_IniReadStr()
+ Added hb_IniWriteStr() that returns a string from an Ini hash
hb_iniWriteStr( hIni, cCommentBegin, cCommentEnd, lAutoMain )
-> cData | NIL
! Fixed a previous error in logic in case of hIni with missing MAIN section
* harbour/include/hbextern.ch
- Removed hb_IniString() declaration
+ Added hb_IniReadStr() and hb_IniWriteStr() external declarations
* harbour/tests/parseini.prg
+ Added samples of hb_IniReadStr() and hb_IniWriteStr() functions
* harbour/src/rtl/hbini.prg
* Splitted hb_IniRdLow() internal function into two functions:
hb_IniFileLow( cFileSpec ) -> cData
hb_IniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMain ) -> hIni
+ Added new hb_IniString() funtion
hb_IniString( cData, lKeyCaseSens, cSplitters, lAutoMain ) -> hIni
that reads directly from a string.
So hb_IniRead() read from a file, hb_IniString() read from memory string.
* harbour/include/hbapicdp.h
* harbour/src/rtl/cdpapi.c
* harbour/src/rtl/is.c
* moved hb_charIs*() functions to cdpapi.c file for easier updating
in the future
% optimized memory allocation for new codepages
* harbour/contrib/hbct/pos1.c
* use hb_charIs*() functions instead of accessing HB_CODEPAGE
structure members
- source
+ src
* src/Makefile
* src/dynlib/mt/Makefile
* src/dynlib/Makefile
* INSTALL
* Makefile
* ChangeLog
* harbour.spec
* mpkg_tgz.sh
* Renamed 'source' dir to 'src' to move closer to other FOSS
projects. It's also easier to type, plus it has the side
effect that some cmdlines will be shorter in the
build process.