* contrib/hbexpat/3rd/expat/expat.diff
* contrib/hbexpat/3rd/expat/loadlibr.c
! use HB_WINAPI_GETPROCADDRESS() instead of GetProcAddress()
in WinCE builds
* contrib/hbhpdf/3rd/libhpdf/hpdfstre.c
* contrib/hbhpdf/3rd/libhpdf/libhpdf.diff
! include <windows.h> in WinCE builds, it's necessary for GetLastError()
* src/3rd/jpeg/Makefile
! do not use getenv() in all WinCE builds
* src/common/hbver.c
* cast revision number to HB_ULONG to pacify warning
* src/vm/extrap.c
! do not compile unused in WinCE builds hb_winExceptionHandler()
* include/hbapi.h
* added HB_EXPORT attribute to hb_macroTextValue() function
* include/hbvm.h
* src/vm/hvm.c
+ added C function:
PHB_ITEM hb_vmCompileMacro( const char * szExpr, PHB_ITEM pDest );
It returns Harbour item or NULL at error (wrong macro text).
The result should be used with hb_vmEvalBlockOrMacro() and then freed
by hb_vmDestroyBlockOrMacro(). It hides low level macro representation
so we can change it in the future. Now it's still simple pointer item
without autodestructor.
* src/rdd/hsx/hsx.c
* src/rdd/workarea.c
* use hb_vmCompileMacro() instead of hb_macroCompile()
* src/vm/runner.c
* changed 6101 error message for "Unknown or unregistered symbol"
to "Unknown or unregistered function symbol".
* report above error when HRB module is loaded and its external function
is not registered or not marked as DYNAMIC by earlier registered modules
in HVM symbol table.
Warning. This modification may exploit problems in code loading HRB files
with cross references which has worked so far. In such case user should
pass to hb_hrbLoad()/hb_hrbRun() as first parameters flags containing
HB_HRB_BIND_LAZY or declare the problematic function in his main code
as dynamic, i.e.:
DYNAMIC <funcName>
* src/rdd/dbf1.c
* declare internal function hb_dbfTransCheckCounters() as static one
* src/harbour.def
! added missing exported Harbour functions
* config/win/global.mk
* utils/hbmk2/hbmk2.prg
! moved winmm library before kernel32. This fixes Harbour compile and
application run on Win7 and previous Windows versions if latest MinGW
is used.
; Win8+ exports timeGetTime() from both kernel32.dll and winmm.dll.
Previous windows version exports this function only from winmm.dll.
See discussion at https://github.com/msys2/MINGW-packages/issues/4984
* utils/hbmk2/hbmk2.prg
! Fixed dependency detection. Setting HB_WITH_<package>=local was ignored
if packages were detected using pkg-config
* contrib/hbexpat/3rd/expat/siphash.h
! fixed compile error for BCC <= 5.6
* rediffed
* contrib/hbexpat/3rd/expat/loadlibr.c
! define _UNICODE macro when UNICODE is also defined - it should be fixed
in EXPAT core code. It fixes Windows builds.
* contrib/hbexpat/3rd/expat/xmlparse.c
! restored fix for WINCE builds
* contrib/hbtip/client.prg
! restored #undef __HBEXTREQ__ before #include "hbssl.hbx".
It fixes non SSL builds and binding HBTIP with all HBSSL
functions.
* contrib/hbexpat/hbexpat.hbc
* added /usr/local/opt/expat/lib library path to darwin builds
(synced with Viktor's 3.4 branch)
* config/darwin/clang.mk
* config/darwin/gcc.mk
* config/darwin/global.mk
* config/darwin/icc.mk
* config/darwin/libs.mk
* utils/hbmk2/hbmk2.prg
* synced with Viktor's modifications in 3.4 branch:
; 2017-11-11 13:14 UTC Viktor Szakats:
* switch to call the C compiler to link dynamic libs on darwin,
which is the recommended way to do this, as suggested by Apple.
This also aligns the platform better with other *nix platforms.
'libtool' was used before, but that started having intermittent
issues around Sierra (mitigated by disabling parallel build),
which returned and got worse in High Sierra (with no remedy).
The symptom was 'ld: file not found: ' errors with the filename
not shown or appearing as garbage, then a 'libtool: internal link
edit command failed'. This was reported and will be fixed in a
future Xcode release.
Ref: Apple Radar 34944562
* config/global.mk
* config/rules.mk
+ added new user build envvar HB_USER_DCFLAGS
It allows to set C compiler parameters to compile .c code for
dynamic libraries.
* src/rtl/hbsocket.c
! fixed fcntl(F_SETFL) 3-rd parameter in hb_socketSetBlockingIO(),
By mistake I used long instead of int. it created problem on big
endian 64 bit machines.
* include/hbgtcore.h
* src/rtl/hbgtcore.c
+ added new C functions for GT programmers:
void hb_gt_BaseUnlock( PHB_GT pGT );
void hb_gt_BaseLock( PHB_GT pGT );
void hb_gtSleep( PHB_GT pGT, double dSeconds );
* src/rtl/hbgtcore.c
* src/rtl/gtcrs/gtcrs.c
* src/rtl/gtdos/gtdos.c
* src/rtl/gtgui/gtgui.c
* src/rtl/gtos2/gtos2.c
* src/rtl/gtpca/gtpca.c
* src/rtl/gtsln/gtsln.c
* src/rtl/gtstd/gtstd.c
* src/rtl/gttrm/gttrm.c
* src/rtl/gtwin/gtwin.c
* src/rtl/gtwvt/gtwvt.c
* src/rtl/gtxwc/gtxwc.c
* use new functions to unblock GT when low level TONE() code is
executed. It allows other threads to access shared GT driver
when one of them executes TONE()
* contrib/hbexpat/hbexpat.hbx
* regenerated automatically
* contrib/hbamf/amfenc.c
* update amf3_Encode() serialize function with great idea of Przemek
implemented recenly in hb_Serialize(). Checking garbage collector
reference count can save time here too, unique arrays and hashes won't
be indexed as references.
* contrib/hbexpat/3rd/expat/*
! updated to 2.2.5 (from 2.2.1) using 3rdpatch.hb, expat.diff from
Viktor's 3.4 fork was used - but (again) adapted for DOS 8.3 naming
scheme. Also i've kept local patches for WinCE, OpenWatcom DOS/OS2,
please test. Compilation in CPP mode is explicitly disabled for libexpat
now, as upstream decided to ignore such use cases completly.
* contrib/hbexpat/*
* synced with Viktor's 3.4 fork
+ include/hbarc4.h
* src/harbour.def
+ export ARC4 core routines like in 3.4 fork, updated expat lib reuses it.
* contrib/hbtip/hbtip.hbp
! adapt *.hbx file specifier to hbmk2 3.2 syntax
* *
* partial sync with the 3.4 fork codebase. These are the things
synces for the most part:
- copyright headers
- grammar/typos in comments and some readmes
- comment/whitespace/decorations
- variable scoping in C files
- DO CASE/SWITCH and some other alternate syntax usage
- minimal amount of human readable text in strings
- minor code updates
- HB_TRACE() void * casts for pointers and few other changes to
avoid C compiler warnings
- various other, minor code cleanups
- only Harbour/C code/headers were touched in src, utils, contrib,
include. No 3rd party code, no make files, and with just a few
exceptions, no 'tests' code was touched.
- certain components were not touched were 3.4 diverged too much
already, like f.e. hbmk2, hbssl, hbcurl, hbexpat
- the goal was that no actual program logic should be altered by
these changes. Except some possible minor exceptions, any such
change is probably a bug in this patch.
It's a massive patch, if you find anything broken after it, please
open an Issue with the details. Build test was done on macOS.
The goal is make it easier to see what actual code/logic was changed
in 3.4 compared to 3.2 and to make patches easier to apply in both
ways.
* contrib/hbexpat/3rd/expat/_hbconf.h
* contrib/hbexpat/3rd/expat/xmlparse.c
! fixed WINCE builds
! fixed OpenWatcom DOS builds
! fixed OpenWatcom OS2 builds
* contrib/hbexpat/3rd/expat/expat.dif
* rediffed
* include/harbour.hbx
* include/hbvm.h
* src/harbour.def
* src/vm/hvm.c
* src/vm/thread.c
+ added new C function
HB_BOOL hb_vmThreadIsMain( void * );
it checks if given or current thread is main HVM thread
+ added new PRG function
hb_threadIsMain( [ <pThID> ] ) -> <lMainHvmThread>
it returns true if given or current thread is main HVM thread
+ added new PRG function
hb_mutexExists( <pMtx> ) -> <lExists>
it returns true if passed <pMtx> parameter is pointer item to
fully functional mutex
* src/rtl/tpersist.prg
! fixed problem with array item deserialization - many thanks
to Peter Rees for exact information about the problem.
* src/rtl/val.c
* minor simplification
* contrib/hbwin/olecore.c
+ added support for multidimensional typed OLE arrays, now
__oleVariantNew() accepts the following parameters:
__oleVariantNew( <nVariantType>, [<xInitValue>], [<nDims,...>] )
-> <pVariant>
i.e.:
pOleArray := __oleVariantNew( WIN_VT_VARIANT, aVal, ;
len( aVal ), len( aVal[ 1 ] ) )
pOleArray2 := __oleVariantNew( WIN_VT_I4, ;
{ { 1, 2, 3 }, { 4, 5, 6 } }, 2, 3 )
If initialization array is smaller the declared size then in OLE array
uninitialized items have default value for given type. NIL array items
are ignored other non array values in nodes generate errors. Strings
can be used on last level to initialize OLE arrays with ASCII values of
their characters.
Please test it in real MS-Window environment.
* contrib/hbexpat/3rd/expat/_hbconf.h
! fixed MS-Windows builds
* contrib/hbexpat/3rd/expat/*
! updated to 2.2.1 (from 2.1.0) using 3rdpatch.hb, expat.dif(f) from
Viktor's 3.4 fork was used - but adapted for DOS 8.3 naming
scheme. According to issue #157, previous revisions of expat have
security vulnerabilities, for more information refer to:
https://github.com/libexpat/libexpat/blob/master/expat/Changes
Many thanks to Sebastian Pipping for the information.
* contrib/hbexpat/hbexpat.ch
+ new constant HB_XML_ERROR_INVALID_ARGUMENT added
* *
% remove brandings and homepage [1] from copyright header. Pass 1 - using script.
[1] nobody has access to it anymore AFAIK - and it's also just
a redirect since long
! update url in copyright header
; this should make the diff between 3.4 and 3.2 easier to manage
* src/rtl/filebuf.c
! unlock HVM stack before locking local mutex and calling hb_fs*()
functions which also unlocks HVM. It fixes possible deadlock condition
when hb_gcAll( .T. ) is executed.
* include/hbapi.h
* src/vm/garbage.c
! changed mark function semantic.
Adding support for user defined mark function I created race condition
in MT GC code. It happens because blocks marked as deleted were not
scanned by GC mark code so their subitems where not accessible.
To fix it we have to change mark function semantic. Now mark function
can be executed also for blocks currently deleted. It means that GC
block destructor should clean references to just removed items and
subblocks. The best place to make it is clearing pointers to GC blocks
just after hb_itemRelease() or hb_gcRefFree().
It is save to clean the reference just before hb_itemRelease() or
hb_gcRefFree() but only for the single block passed to these functions.
It is not save to clear reference to more then one block and then
execute above functions.
+ check reference count after destructor execution for all blocks
not only arrays - warning it may exploit some wrong C code.
- removed not longer used hb_gcRefCheck() function.
* include/hbvm.h
* src/vm/hvm.c
+ added new internal function hb_vmLockForce()
! fixed to mark GC blocks with active threads
* src/vm/thread.c
* include/hbthread.h
% modified sync mutexes used by xBase++ signal class emulation
to not use item array internally
* updated mutex destructor to new GC mark semantic
! mark GT items if GT is bound with thread item
! fixed mutex notify/subscribe code to not change GC items
when HVM stack is unlocked
! use hb_vmLockForce() to eliminate potential deadlock
+ added new C function hb_threadEnterCriticalSectionGC().
It should be used instead of hb_threadEnterCriticalSection()
in code which manipulates GC items inside critical section.
It's slower but eliminates possible deadlock condition.
Please remember that remember that both functions cannot
be used for the same mutex. So if it's necessary to use
hb_threadEnterCriticalSectionGC() in one place then it
has to be used in all others when the same mutex is locked.
* src/vm/arrays.c
* src/vm/codebloc.c
* src/vm/hashes.c
* src/rtl/hbgtcore.c
* contrib/hbcurl/core.c
* contrib/hbexpat/core.c
* updated destructors to new GC mark semantic
* contrib/hbxpp/dllx.c
! fixed destructor for pointer item created by DllPrepareCall()
Now it respects reference counter.
; added note about real behavior of library handle destructor,
I haven't changed existing code behavior but maybe it should
be done.
* contrib/xhb/hbserv.c
* src/debug/dbgentry.c
* src/rdd/wacore.c
! fixed possible deadlocks by using hb_threadEnterCriticalSectionGC()
instead of hb_threadEnterCriticalSection().
* contrib/hbmemio/memio.c
! slightly modified hb_memfsDirectory() code to avoid race condition
without using hb_threadEnterCriticalSectionGC()
* src/vm/fm.c
% reduce the lock range in HB_FM_STAT builds
* src/rtl/hbsocket.c
! added missing HVM stack unlocking in hb_socketSelect() function
* src/rtl/gtxwc/gtxwc.c
! added few missing locks for version compiled with HB_XWC_XLIB_NEEDLOCKS
* src/rdd/dbtotal.prg
* allow to use symbols instead of codeblocks
* modified Harbour extension which uses ordKey() as default group
signature to work also without index. In such case all records
are summarized into single one.
; Most of above modifications were critical for stability of MT programs.
They should allow to activate GC in any place.
* bin/commit.hb
+ added code to launch default git editor with ChangeLog.txt
(not yet activated)
* contrib/hbexpat/hbexpat.hbc
- reverted these two:
2013-04-03 16:01 UTC+0200
2013-03-27 16:29 UTC+0100
It seems that expat.hbc is always installed regardless
of local or system copy is used along the build/install
process
* utils/hbmk2/hbmk2.prg
! fixed -run on Darwin after 2013-03-15 13:57 UTC+0100
(untested)
* bin/check.hb
! fixed shrinking of ChangeLog.txt to not result in broken EOLs
! refinements around interactions of EOL checks and fixes
! include Harbour files "hidden" under /3rd/ dirs
* bin/commit.hb
+ set errorlevel, so it can now be used as a git pre-commit hook
(as 'exec hbrun bin/commit' in .gits/hooks/pre-commit)
* contrib/hbexpat/hbexpat.hbc
! fixed expat.hbc detection to actually look for .hbc file not .h
(which is never present)
* utils/hbmk2/hbmk2.prg
+ added depfinish= .hbc directive. It was missing, yet I
was using it in hbexpat.hbc in recent patch, and wondered
why it didn't work
[ the necessity of the whole previous patch is still suspect
though. ]
+ show warning for any .hbc directives that is unknown.
This should avoid above situation nicely.
INCOMPATIBILITY: Thus far all lines with unknown directives
were ignored, now only empty ones or ones that begin with
'#' character (in first column), as documented. Clean your
.hbc files accordingly.
! fixed typo in one help text. Pls retranslate, I hope Transifex
keeps previous texts, but you can find it in next language
update commit, if not.
* package/harb_win.mft
! deleted BOM (detected by check.hb)
* contrib/3rd/sqlite3/sqlite3.hbc
* contrib/3rd/sqlite3/sqlite3.hbp
* contrib/hbbz2/3rd/bz2/bz2.hbc
* contrib/hbbz2/3rd/bz2/bz2.hbp
* contrib/hbexpat/3rd/expat/_hbconf.h
* contrib/hbexpat/3rd/expat/expat.hbc
* contrib/hbexpat/3rd/expat/expat.hbp
* contrib/hbhpdf/3rd/libhpdf/_hbhbpdf.c
* contrib/hbhpdf/3rd/libhpdf/libhpdf.hbc
* contrib/hbhpdf/3rd/libhpdf/libhpdf.hbp
* contrib/hblzf/3rd/liblzf/lzf.hbc
* contrib/hblzf/3rd/liblzf/lzf.hbp
* contrib/hbmlzo/3rd/minilzo/minilzo.hbc
* contrib/hbmlzo/3rd/minilzo/minilzo.hbp
* contrib/hbmxml/3rd/minixml/config.h
* contrib/hbmxml/3rd/minixml/minixml.dif
* contrib/hbmxml/3rd/minixml/mxml.hbc
* contrib/hbmxml/3rd/minixml/mxml.hbp
* contrib/hbmzip/3rd/minizip/minizip.hbc
* contrib/hbmzip/3rd/minizip/minizip.hbp
* contrib/hbxdiff/3rd/libxdiff/_hbconf.h
* contrib/hbxdiff/3rd/libxdiff/xdiff.hbc
* contrib/hbxdiff/3rd/libxdiff/xdiff.hbp
* lib/3rd/win/bcc/Makefile
* lib/3rd/win/mingw/Makefile
! deleted SVN IDs
* rediffed where required
* utils/hbmk2/hbmk2.prg
! fixed to suppress remaining remaining double outputs at
startup in hbrun mode, when processing .hbc files
* contrib/hbexpat/hbexpat.hbc
! added usage time detection of locally hosted 3rd party
dependency to avoid warnings when the locally hosted
dependency is not present (f.e. because the system
hosted copy was used at build/install time)
Experimental. If it works fine, should be applied to
other similar contribs:
hbbz2, hbhpdf, hblzf, hbmlzo, hbmxml, hbmzip, hbsqlit3, hbtinymt, hbxdiff, sddsqlt3
* README.md
* typographic and misc improvements
* config/global.mk
+ detect qnx cross-compile tool (via Francesco Perillo)
* include/hbsetup.h
* src/common/hbtrace.c
+ added macro HB_OS_QNX_BB10 for BlackBerry 10 subplatform
+ guard some stuff that's not present in BB10 (via Francesco Perillo)
* contrib/hbtinymt/3rd/tinymt/tinymt.hbc
! deleted $Id$
* (all files)
* stripped svn header
* minor cleanups
; use following command to find out the history of files:
git log
git log --follow
git blame
git annotate