* config/global.cf
+ Minor improvements.
; NOTE:
I was experimenting how to return HB_COMPILER
and HB_ARCHITECTURE values from GNU Make to caller batch/script.
So far no success.
Help/ideas would be much appreciated. This would be needed
to fully switch to GNU Make level arch/comp detection, since
these values are also needed by make_gnu*.*, mpkg_gnu.* scripts.
* source/rtl/hbinet.c
* Renamed iErrorCode to iError.
* config/header.cf
* config/rules.cf
* config/none.cf
* config/global.cf
* config/doc.cf
* config/lib.cf
* config/bin.cf
* config/dir.cf
* config/test.cf
+ Added HB_COMPILER and HB_ARCHITECTURE autodetection.
It's experimental yet.
+ Added support for HB_BUILD_SUBDIR envvar which can
extend the <arch>/<comp> path by arbitrary subdir(s).
Useful to keep custom binary builds in parallel, f.e.
release/debug, cpp/c, cpu targets. Notice that hbmk2
will not be able to use such customized directory
structure yet, but there'll probably be a cmdline option
for that in the future (it won't/can't be automatic).
Notice, this feature doesn't work yet on OS/2 because
the shell doesn't support 'mkdir -p' equivalent.
* Cleaned internal ARCH_COMP var usage.
% Deleted SOURCE_DIR usage, it was a no-op.
* make_gnu.bat
! Fixed autodetection of mingwarm.
; Autodetection code will have to be deleted from here anyway.
+ config/os2-mkdir.exe
+ Added OS/2 GNU mkdir executable. (not yet used)
* examples/superlib/superlib.dif
+ Added 'const'.
* source/rtl/hbinet.c
! Fixed to use hb_retc() to return hb_socketErrorStr() value.
* source/rtl/hbinet.c
% Cleaned old error description handling logic. Now the error
desc is dynamically retrieved instead of being stored along
the error code.
* harbour/source/rtl/hbinet.c
! modified hb_inetRecv[All]() to always return number
of bytes read if at least one byte was successfully read
just like in documentation so it's not longer necessary to
use hb_inetCount() to check real number of read bytes.
On error they return -1 and 0 when foreign host closed connection.
! modified hb_inetSend[All]() to always return number of written
bytes if at least one byte was successfully written so it's not
longer necessary to use hb_inetCount() to check real number of
written bytes. On error they return -1.
! modified hb_inetRecvLine() to return "" on errors and always
set numeric value with error code or number of bytes read
in 2-nd parameter passed by reference
! modified hb_inetDataReady() to return -1 instead of .F. to
indicate errors when socket is not open socket
! modified hb_inetRecvLine() and hb_inetRecvEndBlock() to work
like in documentation and set in 2-nd parameter passed by
reference the size of read line with line terminator, -1
or error and 0 when foreign host closed connection.
! modified hb_inetRecvEndBlock() to always use default EOL when
there is no not empty string in passed string parameter or
passed array with line terminators
! fixed some small differences between hb_inetRecvLine() and
hb_inetRecvEndBlock()
! fixed returned values in hb_InetDGramSend() and hb_InetDGramRecv()
to be synced with documentation
* minor: modified hb_inetRecvEndBlock() to use as default EOL
s_inetCRLF instead of hardcoded "\r\n"
* eliminated some redundant code
+ added automatic socket initialization in windows builds
% added support for read ahead buffer in hb_inetRecvLine() and
hb_inetRecvEndBlock() and updated other functions which may
interact with it. It greatly improved the speed of code
which extensively uses above functions.
Warning!!! Above modifications may force updating other code which used
some undocumented hb_inet*() functions behavior i.e. some side
effects in previous implementation. Please update your code
if necessary.
* harbour/doc/inet.txt
! modified hb_inetAccept() documentation wrongly describing value
returned on error when it's NIL
* harbour/config/os2/watcom.cf
! fixes for real OS2 command processor - please test
* 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()
* 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
* 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.
* 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.
* 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.
* source/rtl/hbinet.c
* Formatting, cleanup.
* Few types cleaned. Although many 'int's seems better be 'long',
I didn't touch it.
Please review. No functionality should change.
! HB_INETSTATUSDESC() to always return string if socket is valid.
* contrib/hbxbp/xbpdev.ch
+ Added SVN ID.
* source/rtl/hbinet.c
+ Added hbU16 casts to silence very old warnings.
* source/rtl/gtapiu.c
* Tweaked type and constant usage.
* harbour/source/rtl/hbinet.c
! fixed bad typo introduced in last days probably during some code
formatting which broke HB_INETRECVLINE() and some other functions
* harbour/include/hbthread.h
* harbour/source/vm/thread.c
* emulate POSIX thread conditional variables in Windows builds.
It should fix some possible bad behavior in MS-Windows Harbour
MT programs.
* harbour/source/rtl/hbinet.c
! fixed typo in HB_INETDATAREADY() - the second parameter (timeout)
was ignored.
* harbour/contrib/examples/uhttpd/uhttpdc.c
* fixed typo in conditional iMsec usage.
* harbour/contrib/examples/uhttpd/uhttpd.prg
* set default timeout for socket operations to 3 sec.
* use timeout parameter in HB_INETDATAREADY() and
increased default timeout for accept to 250 millisecs.
Please correct this modification if you prefer different values.
* harbour/include/hbthread.h
! fixed typo
* harbour/source/vm/Makefile
* excluded mainpm.c from OS2 builds
* harbour/source/rtl/hbinet.c
* changed the #include order for OS2 OpenWatcom builds and added some
cleanups - please test other builds.
* harbour/include/hbthread.h
* harbour/source/vm/thread.c
+ added ULONG _hb_gettid( void ) to OS2 builds - thanks to Maurilio
* harbour/source/rtl/hbinet.c
* changed a little bit the order of including header files in OS2 builds
(blink fix for OpenWatcom OS2 builds).
* include/hbextern.ch
* source/vm/cmdarg.c
+ Added HB_CMDLINE() .prg level function to return
the full command line. Currently it does reassemble
it from hb_argc/hb_argv.
* contrib/rddsql/mysqldd.c
! Fixed MSVC casting errors in C++ mode.
* include/hbwmain.c
* source/vm/cmdarg.c
* Moved argv[ 0 ] generation on Windows platform, so
that it now gets properly filled with the full
executable file path for console mode (GTWIN)
apps in all situations (f.e. when run from a
batch file using '%~n1.exe' macro).
* source/rtl/hbinet.c
! Fixed to use safe strerror() (named strerror_s())
under MSVS 2005 and upper.
Please test.
* source/hbzlib/gzio.c
+ Added _CRT_SECURE_NO_DEPRECATE locally to suppress
various MSVC unsafe CRT API usage warnings. Maybe it'd
be better to fix these by using Harbour APIs.
* utils/hbdoc/gentrf.prg
! Fixed missing "common.ch"
* make_vc.mak
* contrib/mtpl_vc.mak
+ -w34701 VC flag added to enabled warning 4701 (uninitialized vars) on -W3 level.
% -FD VC flag removed. This is only needed for IDEs.
% -Gs VC flag moved to the common section.
% VC flags synced in contrib with core.
+ TOFIX added for WinCE command line. It's full of stuff which is _probably_ not needed.
+ NOTE added about MSDN page explaining VC switches.
; NOTE: -W4 and -Wp64 are recommended for MSVC.
; TOFIX: There are still a few uninit vars warnings:
harboury.c(7226) : warning C4701: potentially uninitialized local variable 'hb_complval' used
macroy.c(3095) : warning C4701: potentially uninitialized local variable 'hb_macrolval' used
dbffpt1.c(2671) : warning C4701: potentially uninitialized local variable 'ulType' used
dbffpt1.c(2614) : warning C4701: potentially uninitialized local variable 'ulSize' used
dbffpt1.c(3073) : warning C4701: potentially uninitialized local variable 'ulOldSize' used
dbffpt1.c(3083) : warning C4701: potentially uninitialized local variable 'ulBlock' used
dbffpt1.c(3652) : warning C4701: potentially uninitialized local variable 'pBlock' used
* source/rdd/workarea.c
! Fixed DBI_POSITIONED value returned.
* include/hbsetup.h
* source/vm/pvalue.c
* source/rtl/fserror.c
* source/rtl/accept.c
* source/rtl/descend.c
* source/rtl/inkey.c
* source/rtl/dates.c
* source/rtl/fkmax.c
* source/rtl/natmsg.c
* source/rtl/hbinet.c
* source/rtl/dates.c
! Fixed some MSVS2008 -W4 warnings (we use -W3 as the default).
; NOTE: There is a lot more of these.
* source/rtl/dates.c
* Formatting.
* source/rtl/hbinet.c
! Bad workaround for the '__WSAFDIsSet unresolved' problem
in Pelles C 5.00.13 AMD64 mode, to make final executables
link at all. Some hbinet.c features (or the whole module)
won't properly work though.
This possible bug has been reported on the Pellec C forums:
http://forum.pellesc.de/index.php?topic=2590.0
* source/common/hbver.c
* hb_verCompiler() buffer size cleanup.
* source/rtl/hbinet.c
* Minor formatting.
* utils/hbmake/hbmake.prg
* PRG -> .prg on some screen messages.
* config/w32/xcc.cf
* config/w32/pocc.cf
+ Added ws2_32.lib. Didn't solve the problem, but
as per MS docs of some functions we use, we should
use this instead of wsock2 (everywhere actually)
[and ws2 instead of winsock for WinCE]. Someone pls
correct me if I'm wrong, or if there is any reason
we're using both and/or the older one?
* config/w32/pocc.cf
- Removed C switch -Zx (Enable Pelles C extensions).
We don't need this.
* harbour/config/w32/dm.cf
* updated for central library directory used by Harbour - not tested
* harbour/config/w32/xcc.cf
! fixed include PATH in XCC builds - Viktor be carefull with
cleaning -I<path> parameter. Some compilers use different
rulles then the one you may expect using the most popular
ones and such operation will break compilation. F.e. XCC
seems to ignore source file location for releative paths
so in GNU make builds it's necessary to add "-I$(TOP)"
instead of "-I." and when included file starts with ".."
then it does not try to use it with paths set by -I option
so we need -I$(TOP)$(ROOT) and hard coded for this compiler
directories in include/hbregex.h and include/hbzip.h
* harbour/source/hbzlib/zutil.h
! do not use fdopen() with XCC - it does not support it
* harbour/contrib/examples/pp/pp.c
* harbour/contrib/examples/pp/hbppcore.c
* harbour/source/common/hbfsapi.c
* harbour/source/rtl/fnsplit.c
* harbour/source/rtl/fstemp.c
! always use _POSIX_PATH_MAX + 1 buffers
* harbour/source/compiler/gencobj.c
* extended line buffer size
* harbour/source/rtl/gtcrs/gtcrs.h
* removed unnecessary declaration for _POSIX_PATH_MAX
it's always defined in Harbour header files
* harbour/source/rtl/inkey.c
* harbour/source/rtl/hbinet.c
* harbour/source/rtl/gtwvt/gtwvt.c
* use hb_array[SG]et*() functions insteaf of
hb_item*( hb_arrayGetItemPtr, ... )
* harbour/contrib/rddads/adsfunc.c
! fixed possibly unclosed AdsCloseSQLStatement()
* harbour/contrib/rddads/ads1.c
* minor cleanup and protection against possible strange results
caused by indexes without tags
* harbour/source/rtl/hbinet.c
! added protection against using wrong handles
! fixed possible resource leak (unclosed handle) when open handle is
passed to HB_INETCONNECT[IP]()
* harbour/source/rtl/filesys.c
* cleaned warnings