* src/vm/hashes.c
* src/vm/hashfunc.c
+ implemented posibility to use hashes a sorted arays with binary search.
Implemented HB_BOOL hb_hashScanSoft( pHash, pKey, &nPos ). Function
if similar to, but returns nPos even if pKey is not found in pHash.
Extended HB_HHASKEY( aHash, xKey [, @nPos ] ) --> lFound
Function optionaly returns position of the item with a largest key
smaller or equal to xKey. If xKey is less than all keys in hash,
zero position is returned. I.e.,
aHash := {10=>, 20=>}
? HB_HHASKEY( aHash, 5, @nPos ), nPos // .F. 0
? HB_HHASKEY( aHash, 10, @nPos ), nPos // .T. 1
? HB_HHASKEY( aHash, 15, @nPos ), nPos // .F. 1
? HB_HHASKEY( aHash, 20, @nPos ), nPos // .T. 2
? HB_HHASKEY( aHash, 25, @nPos ), nPos // .F. 2
- src/rtl/hbdynhb.c
- deleted support to accept raw function pointers. INCOMPATIBLE.
(note the C-level and XBase++ compatibility .prg-level interfaces
continue to offer that option)
; HB_DYNCALL() should be called as follows:
HB_DYNCALL( { <cFunction>, <cLibrary> | <pLibrary> [, <nFuncFlags> [, <nArgFlags1>, ..., <nArgFlagsn> ]] }, ... ) -> <xResult>
where
<nFuncFlags> can be:
hb_bitOr( HB_DYN_CTYPE_*, HB_DYN_ENC_*, HB_DYN_CALLCONV_* )
<nArgFlags*> can be:
hb_bitOr( HB_DYN_CTYPE_*, HB_DYN_ENC_* )
* contrib/hbcairo/core.c
! fixed typo
* contrib/hbssl/ssl.c
! fixed typo in SSL_GET_MODE()
* contrib/hbssl/hbssl.h
* contrib/hbssl/x509.c
* contrib/hbssl/ssl.c
+ implemented release option for X509 collectable pointer
; openSSL increments reference counter for X509 returned
by SSL_get_peer_certificate(), but does not increment it
for SSL_get_certificate(). Unnecessary freeing of X509
pointer caused random GPF later
* src/rtl/hbsockhb.c
* changed .prg level hb_socketSetBlockingIO() return value
type from lSuccess to nSuccess, to have the same return
value meaning precision as C level function
* src/rtl/hbsockhb.c
* include/harbour.hbx
+ hb_socketGetFD( hSocket ) --> nFD
* harbour/include/hbhrb.ch
* harbour/src/vm/runner.c
* disabled access to INIT and EXIT functions in
HB_HRBGETFUNSYM() and HB_HRBGETFUNLIST()
+ added 2-nd parameter <nType> to HB_HRBGETFUNLIST()
HB_HRBGETFUNLIST( <pHRB> [, <nType>] ) -> <aFuncList>
<nType> is defined in hbhrb.ch:
HB_HRB_FUNC_PUBLIC - locally defined public functions
HB_HRB_FUNC_STATIC - locally defined static functions
HB_HRB_FUNC_LOCAL - locally defined functions
HB_HRB_FUNC_EXTERN - external functions used in HRB module
* harbour/src/rdd/dbf1.c
! fixed default initialization value in UNICODE fields after
APPEND BLANK. Many thanks to Phil Krylov for information about
the problem and patch. The fix I committed is slightly different
just to follow idea of this code.
* harbour/src/rtl/filebuf.c
! fixed next three integer overflows exploited by HB64 locking mode.
BTW probably I'll move the lock range to not operate on last positive
offset because such overflow problems can be also exploited in low
level OS or network transport layer code - it happened in the past.
I'll do that when we confirm that current Harbour implementation
is correct.
* harbour/src/rtl/gtwvt/gtwvt.c
* harbour/contrib/gtwvg/gtwvg.c
! always set trailing 0 in the buffer containing font name set
by HB_GTI_FONTNAME - protection against too long strings.
* harbour/contrib/gtwvg/wvgwing.c
! fixed memory leak in last commit - thanks to Mindaugas.
% use HB_ITEMCOPYSTR() in WVG_FONTCREATE() to eliminate memory
allocation.
* harbour/ChangeLog
! fixed typo in file name in my previous commit.
It should be gtwvg.c not gtwvg.h
* harbour/src/rtl/disksphb.c
! fixed variable declaration for strict ANSI C compilers
* src/rdd/usrrdd/rdds/arrayrdd.prg
! formatting/cleanup, removed unncessary e"" string
! replaced '='/'!=' operator on strings with ==. It's most probably
still broken, but at least now consistently so.
* harbour/src/rdd/usrrdd/rdds/arrayrdd.prg
* Cleaned windows xhb debug using HB_TRACE() function and removed old
lines
* harbour/ChangeLog
* formatted previous log entry
* harbour/src/rdd/dbfnsx/dbfnsx1.c
! fixed index header verification when index is loaded.
In Harbour DBFNSX and DBFNTX automatically switch to different
internal format when HB_DBFLOCK_HB64 is used. In this format
they store in index files page numbers instead of page offsets
what effectively increase maximal file size to 4TB (from 4GB).
* harbour/debian/changelog
* harbour/debian/rules
* changed version number to 3.1.0-1
* removed HB_BUILD_DEBUG=yes
* use 'dh_prep' instead of deprecated 'dh_clean -k'
* harbour/src/rtl/gttrm/gttrm.c
! fixed my C&P typo in HB_TRACE() message
+ harbour/doc/locks.txt
+ added descirption of DBF locking schemes
* harbour/include/hbrdddbf.h
* modified DB_DBFLOCK_HB64 locking scheme
- extended RLOCK/FLOCK area from 2^31-2 to 2^32-2
it effectively changes maximum number of records in this
locking scheme to 4'294'967'294
- use COMIX like hyper locking mode
it should increase performance
Warning: INCOMPATIBLE!
all applications using DB_DBFLOCK_HB64 locking mode should
be updated - it is not safe to concurrently access the
same files using programs compiled with older Harbour
versions and current one.
* renamed the following DB_DBFLOCK_* macros:
DB_DBFLOCK_CLIP to DB_DBFLOCK_CLIPPER
DB_DBFLOCK_CL53 to DB_DBFLOCK_COMIX
DB_DBFLOCK_CL53EXT to DB_DBFLOCK_HB32
* added new locking scheme: DB_DBFLOCK_CLIPPER2
This locking scheme is designed to replicate _real_ locking scheme
used by Cl*pper applications linked with NTXLOCK2.OBJ
It's different then the documented one.
; Now Harbour supports the following locking schemes:
DB_DBFLOCK_CLIPPER 1 default Clipper locking scheme
DB_DBFLOCK_COMIX 2 COMIX and CL53 DBFCDX hyper locking scheme
DB_DBFLOCK_VFP 3 [V]FP, CL52 DBFCDX, SIx3 SIXCDX, CDXLOCK.OBJ
DB_DBFLOCK_HB32 4 Harbour hyper locking scheme for 32bit file API
DB_DBFLOCK_HB64 5 Harbour hyper locking scheme for 64bit file API
DB_DBFLOCK_CLIPPER2 6 extended Clipper locking scheme NTXLOCK2.OBJ
* harbour/include/hbrdddbf.h
* harbour/include/hbrddntx.h
* harbour/include/hbrddnsx.h
* harbour/include/hbrddcdx.h
* harbour/src/rdd/dbf1.c
* harbour/src/rdd/dbfntx/dbfntx1.c
* harbour/src/rdd/dbfnsx/dbfnsx1.c
* harbour/src/rdd/dbfcdx/dbfcdx1.c
+ finished support for COMIX like hyper locking.
This modification enables periodical switch to write locks
by readers to eliminate starvation effect on some systems
where many readers can completely block writer.
By default readers use exclusive lock once per each 16 operations.
+ added optional support for delayed index write locks (flush locks)
in hyper locking modes.
If index RDD can use such locks then write lock can be divided into
two parts:
1) block writers and new readers (write lock)
[prepare index modifications in memory]
2) wait for old readers still active (flush lock)
[write modifications to index file]
[release locks]
This mode reduces time when index is locked exclusively increasing
reader performance and also increase writer performance because
waiting for active readers it can prepare index modifications in
memory.
* harbour/src/rdd/dbfcdx/dbfcdx1.c
+ added support for delayed index write locks (flush locks) in DBFCDX
* harbour/src/rtl/filebuf.c
* automatically change write file locks to read locks when file is
open in readonly mode in POSIX systems.
* harbour/src/vm/classes.c
* disabled inheriting of class variables values from ancestor classes
when new class is dynamically created.
Warning: INCOMPATIBLE!
This modification is not backward compatible and can
interact with some existing code which has to be updated
for new behavior.
==> ChangeLog <==
2011-11-17 09:46 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/filebuf.c
! fixed silly typo in previous fix: 2011-09-02 14:03 UTC+0200
! fixed race condition in code emulating DOS/Windows file lock
behavior in POSIX systems. The problem could be exploited by
Harbour MT programs using the same files in many threads in
more then on process. Many thanks to Zsolt for the info and
test code example.
[TOMERGE 3.0]
* src/rtl/hbini.prg
+ keep order of ini items.
Patch by Qatan.
* modified to use HB_HKEEPORDER() instead of HB_HSETORDER()
to be consistent along the patch and because former is the
native, faster synonym.
* harbour/src/rtl/gtxwc/gtxwc.c
+ added support for selecting text with mouse and coping it
to clipboard buffer.
By default this functionality is disabled and can be enabled by:
hb_gtInfo( HB_GTI_SELECTCOPY, .t. )
Marked mode is started by LEFT MOUSE button pressed with SHIFT key
and stopped when LEFT MOUSE button is released. Selected text is
highlight in similar way to GTWVT.
* harbour/src/rtl/gtxwc/gtxwc.c
! create initial console window in fullscreen mode if user called
hb_gtInfo( HB_GTI_ISFULLSCREEN, .T. )
before window was created
* harbour/tests/gtkeys.prg
* modified to optionally test different CPs some extended GT keys
* harbour/src/rtl/gtxwc/gtxwc.c
* return HB_GTI_RESIZEMODE_ROWS for HB_GTI_RESIZEMODE
HB_GTI_RESIZEMODE_FONT is not supported yet by GTXWC
+ added support for HB_GTI_ISFULLSCREEN and HB_GTI_ALTENTER
They work like in GTWVT with HB_GTI_RESIZEMODE_FONT.
Some window managers may not support it so please test it.
+ added support for HB_K_CLOSE, HB_K_GOTFOCUS and HB_K_LOSTFOCUS
like in GTWVT
* harbour/src/rtl/gtxwc/gtxwc.c
+ added support for 'Root' input context for systems where
XLib supports Xutf8LookupString()
It should resolve problems with national characters and
some local signs supported by different keyboards
(i.e. 1/2, euro sign, itp.)
Please test it with different systems.
* harbour/src/rtl/gtxwc/gtxwc.h
* harbour/src/rtl/gtxwc/gtxwc.c
* minor code cleanup
* harbour/src/rtl/gttrm/gttrm.c
+ added support for HB_GTI_WINTITLE for XTerm compatible terminals
* harbour/src/rtl/hbdyn.c
* added dummy assignment to pacify warning
* harbour/src/rtl/hbsocket.c
* added workaround for EREFUSED == ECONNREFUSED.
It has to be tested with different OS-es
* src/rtl/tget.prg
! fixed RTE when setting :picture to NIL for
N and C types in some certain rare circumstantances.
The :picture setting operation is ignored in such case,
since the internally stored original value is not known.
Tested OK against CA-Cl*pper 5.3, though maybe it's
possible to refine this even further with more test cases.
* tests/rto_get.prg
+ added test case for RTE reported by Quique
! fixed warnings
* harbour/src/vm/fm.c
! do not enable by default DLMALLOC in WinCE builds.
It was the source of problems reported by Jarek with file read/write
operation in WinCE builds. Now it should work correctly - please
make some tests with real devices - I used emulator only.
* harbour/contrib/hbwin/wapi_wingdi_font.c
+ added WAPI_ADDFONTRESOURCE() and WAPI_REMOVEFONTRESOURCE()
* harbour/src/rtl/gtwvt/gtwvt.c
! fixed infinite recursive loops and GPF in WinCE builds caused by
SetWindowPos()/ProcessMessages() when WM_SIZE message is processed.
Now GTWVT can be used again in WinCE builds.
* harbour/src/compiler/hbmain.c
! take starting line number from PP to eliminate possible
synchronization problem
* harbour/src/compiler/hbcmplib.c
! minor fix in meta filename detecting
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/src/pp/ppcore.c
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbcmplib.c
+ added support for setting starting line number in code compiled
from memory buffer
! removed unnecessary EF_CANDEFULT flag from recently added
compiler RTE
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbcomp.c
* harbour/src/compiler/hbgenerr.c
+ added support for redirecting compiler warning and error messages
to user function.
* harbour/src/compiler/hbcmplib.c
+ optional support for generating RTE in HB_COMPILE*() functions
on compile errors.
* harbour/src/rtl/transfrm.c
% eliminated hb_charUpper() called for picture clauses and minor
code optimization
* harbour/src/rtl/gtapi.c
! fixed typo in function name: hb_gtBoxS() was wrongly redirected
to HB_GTSELF_BOXD() instead of HB_GTSELF_BOXS()
* harbour/include/hbapicdp.h
* harbour/src/rtl/cdpapi.c
- removed hb_cdpchrcmp() function and HB_CDP_ISBYTESORT() macro
+ added new function:
const HB_UCHAR * hb_cdpGetSortTab( PHB_CODEPAGE cdp );
it returns binary sort table or NULL if given CP uses more
complicated sorting algorithm.
* harbour/include/hbrddcdx.h
* harbour/src/rdd/dbfcdx/dbfcdx1.c
% use hb_cdpGetSortTab() to take binary sort table used by WA CP
instead of creating new one for each WA.