* source/vm/dlmalloc.c
! Restored 2.8.3.
Huge amount of warnings (all Windows compilers), compile time (pocc, watcom)
and build time (mingw) errors, incompatibility with fm.c parts, with 2.8.4,
so I opted to revert.
I hope someone will give it another go, as it should provide better MT
performance on Windows, unfortunately this feature doesn't seem to be well
tested at this point.
* config/lib.cf
! Fix dir creation for hbpp executable with os2 shells.
* source/vm/dlmalloc.c
+ Updated to 2.8.4 (from 2.8.3)
Reapplied two local patches (the rest of local fixes were applied upstream):
2009-07-28 16:31 UTC+0200 Przemyslaw Czerpak
2009-03-30 22:17 UTC+0200 Przemyslaw Czerpak
; From the dlmalloc changelog:
V2.8.4 Wed May 27 09:56:23 2009 Doug Lea (dl at gee)
* Use zeros instead of prev foot for is_mmapped
* Add mspace_track_large_chunks; thanks to Jean Brouwers
* Fix set_inuse in internal_realloc; thanks to Jean Brouwers
* Fix insufficient sys_alloc padding when using 16byte alignment
* Fix bad error check in mspace_footprint
* Adaptations for ptmalloc; thanks to Wolfram Gloger.
* Reentrant spin locks; thanks to Earl Chew and others
* Win32 improvements; thanks to Niall Douglas and Earl Chew
* Add NO_SEGMENT_TRAVERSAL and MAX_RELEASE_CHECK_RATE options
* Extension hook in malloc_state
* Various small adjustments to reduce warnings on some compilers
* Various configuration extensions/changes for more platforms. Thanks
to all who contributed these.
* harbour/source/rtl/hbsocket.c
* force blocking IO on socket returned by accept() - on some system
new sockets can inherit blocking IO flag from the listening socket
* harbour/source/rtl/hbsocket.c
! fixed stupid typo in S&R - I reverted select() socket sets
in send()/recv() when I was modifying function names.
It can be also an answer why it exploited some problems
with hb_InetRecvLine() in Francesco code.
* harbour/source/rtl/hbsocket.c
* accept NULL and empty string "" as default address (INADDR_ANY)
in hb_socketInet?Addr() functions
* harbour/source/rtl/hbinet.c
% use NULL as default address in hb_socketInetAddr()
* harbour/source/rtl/gtcrs/Makefile
* disabled from OS2 builds - if someone knows OS2 curses port then
he can try to reenable it and update gtcrs code to compile with it.
* include/hbsocket.h
* contrib/hbssl/hbssl.c
* source/rtl/hbsocket.c
* source/rtl/hbinet.c
* examples/uhttpd2/socket.c
* examples/httpsrv/socket.c
* HB_SOCKET_T -> HB_SOCKET
* contrib/gtwvg/gtwvg.c
* contrib/gtwvg/wvggui.c
* source/rtl/gtstd/gtstd.c
* source/rtl/filesys.c
* source/rtl/gtpca/gtpca.c
* source/rtl/gtwvt/gtwvt.c
! Added casts for msvc64.
Some C RTL functions in msvc64 expects file handles as 'int's.
The rest is some non-critical stuff.
Now only size_t to int/ULONG warnings remain in hbrtl.
; TOFIX: Plus these two:
../../../hbstrfmt.c(459) : warning C4244: 'argument' : conversion from '__int64' to 'ULONG', possible loss of data
../../../hbtoken.c(280) : warning C4244: '=' : conversion from '__int64' to 'ULONG', possible loss of data
* harbour/source/rtl/hbsocket.c
% small improvement in INET6 broadcast address initialization
enabled for all *nix builds, tested only with Linux and SunOS.
* make_gnu_os2.cmd
* make_gnu.bat
% Deleted defaulting of HB_*_INSTALL. Now done by make files.
; Same should be done for *nixes.
* contrib/xhb/inet.h
* Converted to a stub which shows error. This header was
making public some local structures and functions which are
no longer supported in Harbour.
* contrib/xhb/inet.h
* contrib/hbct/print.c
* contrib/hbtpathy/tpwin.c
* source/rtl/hbinet.c
! *WIN_32* -> *WIN*
* source/rtl/hbinet.c
% Deleted _HB_SOCKET
* [P]HB_SOCKET -> [P]HB_SOCKET_STRUCT
; This gives way to use HB_SOCKET as a public name.
* Renamed Socket -> socket, Newsocket -> new_socket
; Generated code is verified to stay the same.
* source/pp/Makefile
! Do not install hbpp executable when HB_HOST_BUILD == 'lib'.
Please verify me.
* config/global.cf
% Minor simplification to HB_*_INSTALL defaulting.
* utils/hbmk2/hbmk2.prg
* Minor formatting.
* external/libhpdf/Makefile
+ Enabled for os2/watcom.
* include/hbdefs.h
* Minor addition to new type section.
'bool' is the new type for boolean, so maybe we should
use them instead of hbBool/TRUE/FALSE.
* source/rtl/hbsocket.c
! Added one 'static'.
* Added one pair of paranthesis (formatting).
* source/rtl/hbgtcore.c
* source/rtl/hbsha1.c
* contrib/hbwin/win_prt.c
* Minor formatting.
* contrib/xhb/xhbfunc.c
+ Added copyright holder for HB_F_EOF().
* contrib/hbssl/ssl.c
! Minor typo in comment.
* contrib/hbssl/hbssl.h
! Added HB_EXTERN_BEGIN/HB_EXTERN_END.
* config/global.cf
+ Added HB_UNIX_COMPATIBLE variable.
+ Setting default lib install dir to lib/<arch>/<comp>
on non-*nix systems.
* examples/httpsrv/socket.c
+ Copied from uhttpd2. Please verify.
* harbour/include/hbstack.h
+ added socket error codes to HB_IOERRORS
* harbour/include/Makefile
+ harbour/include/hbsocket.ch
+ harbour/include/hbsocket.h
* harbour/source/rtl/Makefile
+ harbour/source/rtl/hbsocket.c
+ added new BSD socket functions: hb_socket*(). They should be quite
close to low level C socket interface with few modifications which
help to hide some platform differences. Unfortunately we do not use
autoconf so I had to arbitrary set which features are available
on some platforms. In practice it means that it reduces portability
to older OS-es, i.e. it should work with current Linux versions
but it will not without some modifications in macros used to control
supported features with older Linuxes using kernel 2.2 or 2.0.
The same can happen with other *nix ports like Darwin, SunOS, HP-UX
or with different versions of some Windows compilers. I also do not
know which functionality is available in OS2 GCC ports and I would
like to ask OS2 users to make tests and disable not working features.
We also need tests with HP-UX, Darwin and SunOS.
IP6 support is enabled only in *nixes. If Windows users are interested
in IP6 then please add support for it. Most of Windows compilers do
not support standard POSIX functions so I do not want to make it
myself using unknown for me API without testing.
In *nix builds PF_UNIX/PF_LOCAL sockets are also supported.
Support for other socket types can be easy added if someone is
interested in them.
The constant values used in hbsocket.ch are equal to original BSD
socket definitions. If it's necessary then it's possible to enable
their translation inside hbsocket.c code though I do not think we
will find such OS.
The list of hb_socket*() functions was designed to cover all existing
functionality in hbinet.c and socket.c. Most of functions supports
timeout parameter what effectively allows to hide direct select()
usage.
Please make test with real applications and report any problems
with hb_inet*() functions you will find.
* harbour/source/vm/hvm.c
* minor cleanup
* harbour/source/rtl/hbi18n1.c
* cleaned variable name
* harbour/source/rtl/hbinet.c
* harbour/examples/uhttpd2/socket.c
* harbour/contrib/hbssl/hbssl.c
* updated to use hb_socket*() functions
* harbour/include/hbextern.ch
* enabled HB_INET*() functions in DOS builds - they will simply return
errors
- harbour/include/hbapinet.h
- removed old header file
* harbour/source/pp/ppcore.c
! modified ENDTEXT marker to work also with comments in the same line
It's more closer to Clipper though intentionally we are not fully
CA-Cl*pper compatible here.
+ source/rtl/hbfeof.c
* source/rtl/Makefile
* source/rtl/philes.c
! HB_FEOF() moved to separate file to ease name collision
situations.
* contrib/hbssl/evpciph.c
* contrib/hbssl/bio.c
* contrib/hbssl/evpmd.c
* contrib/hbssl/evpenc.c
! Fixed buffer sizes, after valgrind test.
(off by one bugs. hb_storclen_buffer()/hb_retclen_buffer() need
one byte extra above the size returned, in order to hold the
EOS char)
* contrib/xhb/freadlin.c
* contrib/hbqt/qth/QFtp.qth
* contrib/hbqt/qth/QHttp.qth
* contrib/hbqt/QFtp.cpp
* contrib/hbqt/QHttp.cpp
* contrib/hbcurl/hbcurl.c
* contrib/hbwin/win_prt.c
! Fixed similar to above allocation errors.
* config/global.cf
+ Added HB_???_INSTALL initialization. Just a step, needs more
work before making it a replacement for current method.
* contrib/hbmisc/dates2.c
* Renamed DAYSINMONTH() to HBMISC_DAYSINMONTH(),
to avoid collision with hbct function with the same
name, but different functionality.
- Deleted functions below from hbmisc library:
EOM(), BOM(), WOM(), DOY(), WOY(), EOY(), BOY()
They have superior alternatives with the same name
in hbct lib, please use those.
* contrib/hbssl/evpciph.c
* contrib/hbssl/ssl.c
* contrib/hbssl/bio.c
* contrib/hbssl/tests/pem.prg
+ contrib/hbssl/tests/pubkey.pem
* contrib/hbssl/tests/crypt.prg
* contrib/hbssl/err.c
+ Added EVP_SEALINIT() (under development)
+ Added EVP_SEALUPDATE(), EVP_SEALFINAL().
+ Added SSL_SET_MSG_CALLBACK() (it's a debug function really,
and the solution is slightly hackish, as I have to access
OpenSSL structure and Harbour item freeing needs to be done
manually. Anyhow it can be excluded from builds.
+ Added ERR_LOAD_CRYPTO_STRINGS().
+ Added ERR_PRINT_ERRORS(). (very useful)
+ Added ERR_FREE_STRINGS().
* include/hbapi.h
* source/vm/arrays.c
* source/vm/extend.c
* source/debug/dbgentry.c
* source/rtl/hbgtcore.c
! Renamed API function hb_arraySetCPtr() to hb_arraySetCLPtr().
Old function name still available for compatibility.
* include/hbapi.h
* source/common/hbstr.c
* source/rtl/hbmd5.c
* Moved (and somewhat standardized and renamed) mem to hex C
function from hbm5/rtl to common lib.
* bin/hb-func.sh
! Fixed double '%' chars in hbmk.cfg generation.
* contrib/hbcrypt/Makefile
+ contrib/hbcrypt/hbsha1.c
+ contrib/hbcrypt/hbsha1hm.c
+ contrib/hbcrypt/tests/testsha1.prg
+ Added HB_SHA1() and HB_HMAC_SHA1() functions.
* source/rtl/hbmd5.c
* Changed meaning of second boolean parameter. From
now on a .T. has to be passed to get binary output.
(I won't list this as a incompatible, as the new
parameter has just been introduced)
; by now HB_MD5() and HB_SHA*() functions are synced
in functionality.
* contrib/hbcrypt/hbsha1.c
* contrib/hbcrypt/hbsha2.c
* contrib/hbcrypt/hbsha1hm.c
* contrib/hbcrypt/hbsha2hm.c
* contrib/hbcrypt/tests/testsha2.prg
* Changed all SHA2 functions to returned digest in hex
format by default. The binary format can be requested by
passing .T. as an extra parameter.
INCOMPATIBLE: Please update your sources if you used
these functions. Add .T. parameter to keep
current workings.
* contrib/hbcurl/hbcurl.c
% Cleaned types (no BYTE, no BOOL, deleted unnecessary casts).
Only a few ULONGs remained.
* contrib/hbssl/pem.c
+ Some advances.
* source/rtl/net.c
! Fixed NETNAME()/hb_netname() on dos/watcom platforms
in error cases it was leaking 16 bytes of memory.
(+ minor formatting)
Please review me.
+ NETNAME(), HB_USERNAME() now do conversion from OS
codepage. Couldn't test it, please review me.
* contrib/hbwin/win_reg.prg
* contrib/hbwin/win_regc.c
! GETREGISTRY() fixed to return default only if the
registry entry doesn't exist. Previously it was
falling back to default even if the value existed but
was empty. In case of empty string, these weren't
possible to write from hbwin, but could exist in registry
when written by other tools.
! GETREGISTRY() fixed to return binary data as string
for REG_BINARY types. (previously it was returning
an unsigned int - essentially truncating everything
beyong the first 4 bytes).
! GETREGISTRY() fixed to swap words for REG_DWORD_BIG_ENDIAN
values to return correct unsigned integer results.
(not tested)
! GETREGISTRY() fixed to strip only the ending Chr( 0 )
from string values. This makes it possible to utilize
strings containing nul chars (obviously) and also to
parse REG_MULTI_SZ multistring values.
! GETREGISTRY() fixed to not RTE if WIN_REGQUERYVALUEEX()
returned non-null length and a non-string value.
I still have to understand how this was possible, but
I got a report that it happened on a system.
! WIN_REGQUERYVALUEEX() fixed to store NIL in 5th param,
if the registry entry doesn't exist.
! WIN_REGQUERYVALUEEX() fixed to store empty string when
registry value is zero length.
* include/hbapi.h
* source/vm/extend.c
+ Added API hb_stor() to store a NIL into a parameter passed
by reference.
* source/vm/arrays.c
* Minor formatting.
* harbour/source/vm/itemapi.c
* cleaned hb_itemPutC*() functions. Now each function which accepts
only pure szText pointer without length can be called with NULL
as szText. Each function which need string length parameter needs
non NULL szText value. I hope it's easy to remember for developers.
% minor code optimizations for above rules
* harbour/source/rtl/filebuf.c
* allow to reuse tables in aliased workarea in RW mode after previous
opening in RO mode
* contrib/hbssl/ssl.c
+ contrib/hbssl/hbssl.c
* contrib/hbssl/Makefile
+ HB_SSL_READ_ALL() and HB_SSL_READ_LINE() rewritten.
(HB_SSL_READ_ALL() isn't fully optimal, and maybe there
are errors, please check.)
+ Added SSL_GET_RFD(), SSL_GET_WFD().
* include/Makefile
+ include/hbapinet.h
* source/rtl/hbinet.c
+ Moved some basic declarations to new API header,
mainly to export hb_select[Read|Write]*() functions.
We will also need such header in the future when
we implement C level socket/networking API. Current
solution is quite messy since the header has to
pull Windows headers which may not be friendly with
all usages/include order.
* source/rtl/hbinet.c
* HB_SOCKET_STRUCT renamed to HB_SOCKET.
+ Added PHB_SOCKET type.
+ Added hb_selectReadFD(), hb_selectWriteFD() which
are similar to hb_selectReadSocket() and
hb_selectWriteSocket() but expect raw FD plus explicit
timeout values.
These function names and solutions are tentative
to solve SSL integration with Harbour, and hopefully
in the future we will have a clean net API, the current
one is very messy.
* source/vm/itemapi.c
! hb_itemPutCPtr(), hb_itemPutCLPtr() fixed to put empty
string to item if szText is NULL and length is non-zero,
instead of trying to free NULL pointer causing internal
error.
* include/hbextlng.ch
* Corrected header to be in sync with CDP and not
to repeat the filename.
* contrib/hbssl/Makefile
+ contrib/hbssl/sslerr.c
+ contrib/hbssl/sslx509.c
* contrib/hbssl/ssl.c
* contrib/hbssl/sslctx.c
* contrib/hbssl/hbssl.ch
* contrib/hbssl/tests/test.prg
+ Added ERR_*() API functions.
+ Prefixed .ch contant names with HB_ to avoid collision with
ssl own headers.
+ Added SSL_CTX_SET_MODE(), SSL_CTX_GET_MODE() functions.
+ Added HB_SSL_READ_ALL(), HB_SSL_READ_LINE() functions meaning
to mimic HB_INETRECVALL() and HB_INETRECVLINE(). (probably needs
more work, it'd be great if someone who understands the guts of
these inet functions could take a look)
* SSL_PEEK() synced with SSL_READ() recent changes.
+ Added SSL_SET_MODE(), SSL_GET_MODE(), SSL_SET_MTU() functions.
+ Added SSL_GET_RBIO(), SSL_GET_WBIO() functions.
+ Added SSL_GET_PEER_CERTIFICATE() function.
+ Added X509_GET_SUBJECT_NAME(), X509_GET_ISSUER_NAME(), X509_NAME_ONELINE()
+ Added HB_SSL_MODE_* constants.
* include/hbextern.ch
* Changed to use new hbextlng.ch.
- examples/hbextern/hbextern.lst
! It wasn't deleted in 2009-07-18 21:37 UTC+0600 for some reason.
* source/rtl/console.c
! Fixed OUTSTD() and OUTERR() to output separator space
to std/err instead of alt.
* source/rtl/hbinet.c
% Minor optimization.
* harbour/source/macro/macro.y
* harbour/source/macro/macro.yyc
% improved macrocompiler speed by reducing number of memory
allocations for compiled subexpressions
* harbour/source/pp/Makefile
* removed old HB_PP_RULES used for precomputed pptables
* added protection against setting possible actions executed without
HB_ARCHITECTURE and HB_COMPILER
* harbour/source/pp/Makefile
! set EXE_FILE - it's workaround to force bin/<arch>/<cmp> directory
creation in current make files and then cleaning it if possible
* harbour/config/rules.cf
* removed old hardcoded clean rules which deleted files not created
by build process
* harbour/config/instsh.cf
* pacified install command echo
* harbour/config/globsh.cf
! fixed new sh clean rules: [ ! -f $(LIB_DIR)/* ] causes syntax
error when more then one file exists in $(LIB_DIR) directory
* source/pp/Makefile
! Fixed to delete hbpp.tds.
* config/globsh.cf
+ Attempt to fix nt shell clean rules. Please test.
! Fixed to create bin dir even when lib targets are being
created. This hack is needed to support existing hack
inside source/pp/Makefile. If there is any possibility
to solve current hbpp lib+bin rules in some cleaner ways
IMO we should do it, but so far I couldn't figure out
how current method works.
* harbour/source/rtl/gtcrs/Makefile
* test for HB_COMPILER=djgpp instead of HB_ARCHITECTURE=dos to
activate trick used to detect PDCURSES in DJGPP builds when
* source/pp/Makefile
* config/rules.cf
* config/global.cf
+ Added new internal variable HB_HOST_BIN_DIR to avoid touching
original HB_BIN_COMPILE and in turn mess up __PLATFORM__ macro
definitions in recursive runs to GNU Make.