* src/common/hbstr.c
* src/rtl/hbcom.c
* src/rtl/hbproces.c
* pacified few warnings - thanks to Viktor
* contrib/sddfb/core.c
! fixed code which extracted float number from uninitialized memory.
On some systems it could even cause GPF or other (ie. FPE) exception.
* contrib/hbnetio/netiosrv.c
* minor optimization
* src/rdd/dbcmd.c
* src/rdd/wacore.c
* src/rdd/wafunc.c
! added protection against exceeding the limit of workarea numbers.
Current maximum is 65534, WA 65535 is reserved for internal RDD
WA destructor.
! fixed possible memory leak in hb_rddInsertAreaNode()
* src/vm/set.c
! fixed typo in device detection code
+ added NUL to list of known device names in DOS, OS2 and MS-Win builds
+ recognize \\<server>\<device>, \\.\PIPE\*, \\.\<device> as
device names in DOS, OS2 and MS-Win builds.
* include/hbclass.ch
* disabled DECLARE to not generate ignored by compiler noise in .ppo
files
* src/rdd/dbcmd.c
! allow to use dbSetFilter() with string only parameter without
codeblock - Cl*pper compatibility fix.
Cl*pper allows to set text filter without codeblock. In local
RDDs it effectively does nothing and only dbFilter() returns it
but RDDs with automatic filter optimization like CL53/DBFCDX /
COMIX/ClipMore or RDDs working with remote data base servers
may use only text version of filter and ignore or use with
lower priority the codeblock so Harbour has to work like
Cl*pper here.
* src/rdd/workarea.c
* typo in comment
* contrib/rddads/ads1.c
* do not validate empty text filters
* contrib/hbmzip/mzip.c
! fixed memory leak
! typo in comment
* contrib/hbziparc/ziparc.prg
! strip leading dir separators from filenames stored in ZIP file when
<lWithDrive> parameter of hb_ZipFile() is not set.
* contrib/hbnetio/hbnetio.hbx
* contrib/hbnetio/netiocli.c
* contrib/hbnetio/readme.txt
+ added new client side function:
netio_SetPath( <pConnection> [, <cPath>] ) -> [<cPrevPath>]
It set/get path prefix for automatic file redirection to HBNETIO.
If automatic redirection is activated then <cPath> is removed
from file name passed to HBNETIO server, i.e.:
netio_SetPath( netio_GetConnection(), "//myserver/myshare" )
[...]
/* open "/data/table" on HBNETIO server */
use "//myserver/myshare/data/table"
* allow to pass filename to netio_Decode() with "net:" prefix
* allow to pass to use "net:" prefix in function names passed
to netio_{Proc|Func}*() when <pConnection> parameter is not used
! fixed possible GPF trap when connection cannot be set
* src/vm/memvars.c
% do not create reference chain when memvars are passed by reference
and called function uses PARAMETERS statement
! do not return references from __mvDbgInfo() but destination values
* doc/xhb-diff.txt
! typo
* src/vm/itemapi.c
! typo in debug trace message
* contrib/xhb/hbcompat.ch
* contrib/xhb/xhb.hbp
* contrib/xhb/xhb.hbx
+ contrib/xhb/xhbbit.c
+ added xhb_bitAnd(), xhb_bitOr() and xhb_bitXor() functions which
are compatible with xHarbour &, | and ^^ operators
* contrib/rddads/ads1.c
* do not use long type names in array returned by dbStruct() if
corresponding types exist in core code and have their own name
recognized by other RDDs.
Now only one long type name can be returned: "CICHARACTER"
* *
% remove brandings and homepage from copyright header. Pass 3 - manual.
* project homepage and name is described in README, amongst others
; this should make the diff between 3.4 and 3.2 easier to manage
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
* renamed few variables to avoid -Wshadow warnings
* contrib/hbfimage/fi_wrp.c
* removed unnecessary ;
* contrib/hbodbc/odbc.c
! replaced '\0' with NULL in pointer initialization
* src/3rd/jpeg/Makefile
% added missing HAVE_UNSIGNED_CHAR build macro. Without it LIBJPEG
uses SHORT to hold unsigned 8 bit integers what increases memory
usage and reduces the speed.
* src/pp/hbpp.c
* minor modification to keep string constant C90 comnpatible
* src/rtl/filesys.c
* simplified DOS to POSIX file attribute translation
+ respect hidden and system file attribute in DOS builds of hb_fsOpenEx()
* src/vm/fm.c
! added yet another missing HB_STACK_TLS_PRELOAD
* *
% remove brandings and homepage from copyright header. Pass 2 - semi-auto.
* project homepage and name is described in README, amongst others
; this should make the diff between 3.4 and 3.2 easier to manage
* *
% 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
* config/global.mk
* set HARBOUR=F:100 during build process in OS2 builds - it increases
maximum number of open handles per process from 20 to 100 so it should
be possible to use -j<n> switch during Harbour compilation - please
test, i.e.:
os2-make -j3
* contrib/xhb/hbcompat.ch
! fixed pp rules for Str(,,, <lStrip> ) translation
* include/hbapifs.h
* src/rtl/filesys.c
+ added new C function:
HB_FHANDLE hb_fsOpenEx( const char * pszFileName, HB_FATTR nAttr,
HB_USHORT uiFlags );
* minor cleanup
* include/hbmemory.ch
* src/vm/fm.c
+ added two new actions for Memory() function:
HB_MEM_STATISTICS - return non 0 value if FM statistic is enabled
HB_MEM_ISLIMIT - return non 0 value if used memory limit is
supported
+ added new PRG function:
__fm_allocLimit( [ <nNewLimit> ] ) -> <nPrevLimit>
It allows to set limit for maximum used memory in some memory
managers, -1 means no limit.
Now it works with DLMALLOC and in ST mode it's limit for memory
allocated from system for whole application. In MT mode when
HB_FM_DLMT_ALLOC (default for DLMALLOC) is enabled it's limit for
single MSPACE (Harbour allocates 16 MSPACES and balance them
between threads to improve scalability) so it's rather per thread
limit. If memory statistic module is enabled during Harbour build
process then this limit works with any memory manager and defines
limit for total memory allocated by Harbour application regardles
of MT or ST mode.
* src/vm/hvm.c
* use HB_MEM_STATISTICS instead of HB_MEM_USEDMAX to check if memory
statistic module is enabled
* contrib/hbtip/encurlc.c
! fixed C&P typos in tip_URLEncode() and tip_URLDecode() in may
previous commit
* src/pp/ppcore.c
* pacified warning
* src/common/hbver.c
* src/rtl/hbsocket.c
* updated for Digital Mars C compilation
* include/hbsocket.h
* src/rtl/hbsockhb.c
+ added new C function:
HB_BOOL hb_sockexItemReplace( PHB_ITEM pItem, PHB_SOCKEX pSock );
* contrib/hbssl/ssl_sock.c
+ replace passed socket structure to hb_socketNewSSL_connect() and
hb_socketNewSSL_accept() with new one using SSL filter if it was
passed by reference, current syntax is:
hb_socketNewSSL_connect( [@]<pSocket>, <pSSL> [, <nTimeout> ] )
-> <pSocketSSL>
hb_socketNewSSL_accept( [@]<pSocket>, <pSSL> [, <nTimeout> ] )
-> <pSocketSSL>
* contrib/hbssl/hbssl.hbm
* contrib/hbssl/hbssl.hbx
+ contrib/hbssl/ssl_hbcon.prg
+ added new PRG functions which can be used for fast initialization of
SSL connection:
hb_SSL_new() -> <pSSL>
hb_SSL_connect_inet( <pSocket>, [ <nTimeOut> ], [ @<cInfo> ] )
-> <lConnected>
hb_SSL_connect_socket( <pSocket>, [ <nTimeOut> ], [ @<cInfo> ] )
-> <lConnected>
They do not need any addiitonal initialization code and can be called
as first and the only SSL functions in user code.
* contrib/hbtip/mail.prg
! fixed bug reported by Lorenzo - thanks
* use hb_MemoWrit() in :detachFile() to honor Harbour File IO API
* cleanup
* src/common/hbffind.c
* src/rtl/gtos2/gtos2.c
* src/rtl/hbproces.c
* cleaned DosAllocMem() flags
* src/common/hbfsapi.c
* src/rtl/hbproces.c
* pacified OS2 GCC warnings
* config/global.mk
* show information about HB_MT build parameter if set by user
* contrib/hbtip/encurlc.c
! fixed url decoding - thanks to Lorenzo for reporting the problem
* small simplification of url encoding code
* src/rtl/hbproces.c
! use DosAllocMem() instead of hb_xgrab() to allocate memory for
DosExecPgm() parameters - it should fix the problem with random
build crashes when pipes are used for redirection of child
process standard IO handles - please test in real OS2 environment.
* src/vm/hvm.c
* allow to use == operator for codeblocks
* utils/hbtest/rt_hvm.prg
* updated for == operator which accepts codeblocks
* utils/hbtest/rt_main.ch
* do not define __CLIPPER__ macro when ITK Clip compiler is used
* contrib/hbbz2/errint.c
* added HB_EXPORT to bz_internal_error() declaration
* contrib/hbbz2/core.c
* contrib/hbbz2/hbbz2.hbp
* moved bz_internal_error() definition to separate file to avoid
conflicts when more modules need it and/or define their own.
* contrib/hbplist.txt
+ contrib/hbbz2io/bz2io.c
+ contrib/hbbz2io/hbbz2io.hbc
+ contrib/hbbz2io/hbbz2io.hbp
+ contrib/hbbz2io/hbbz2io.hbx
+ added new Harbour File IO driver for BZIP2 compressed streams.
It redirects files with "bz:" and "bz[1-9]:" prefixes and can be
used with hb_vf*() functions and transfer RDDs like SDF or DELIM,
i.e.
REQUEST HB_BZ2IO, HB_MEMIO
USE test
COPY TO mem:bz:test.txt.bz DELIMITED WITH TAB
FOR EACH cLine IN ;
hb_ATokens( hb_MemoRead( "mem:bz:test.txt.bz" ), .t. )
? cLine
NEXT
or:
REQUEST HB_GZIO, HB_BZ2IO
FUNCTION GZip2Bz2( cFile )
RETURN hb_vfCopy( "GZ:" + cFile + ".gz", "BZ:" + cFile + ".bz2" )
In summary BZ2IO works like GZIO but uses BZIP2 slower though more
efficient compression BZIP2 method instead of GZIP format.
* contrib/hbgzio/gzio.c
* do not clear timeout when at least one byte was read or written,
it may be useful for code which was not designed to work with
partially finished file read/write operations.
* contrib/hbfoxpro/hbfoxpro.ch
+ added new PP rules suggested by Jeff Stone for THIS., .NULL. and CD
* contrib/hbfoxpro/hbfoxpro.hbx
* contrib/hbfoxpro/misc.prg
* contrib/hbfoxpro/miscfunc.c
+ added new functions Id(), Program() and LineNo()
+ added SYS( 1 ), SYS( 11 ), SYS( 2003 )
! fixed SYS( 10 ) to return date as character string
* contrib/gtwvg/wvgcore.c
* contrib/gtwvg/wvgcuig.c
! Fixed ( again ) Wvt_DrawImage() and Wvg_Image() where images were not
being rendered correctly if the height of image is greater than
width of the image. The behavior is only affected when <bDoNotScale>
is set to be TRUE. Thanks Sergy for reporting and providing
code to debug.
+ contrib/hbgzio/gzio.c
+ contrib/hbgzio/hbgzio.hbc
+ contrib/hbgzio/hbgzio.hbp
+ contrib/hbgzio/hbgzio.hbx
+ added new Harbour File IO driver for GZIP compressed streams.
It redirects files with "gz:" and "gz[0-9]:" prefixes and can be
used with hb_vf*() functions and transfer RDDs like SDF or DELIM,
i.e.
REQUEST HB_GZIO
USE test
COPY TO gz:test.txt.gz DELIMITED WITH TAB
or:
REQUEST HB_GZIO, HB_MEMIO
hb_vfCopy( "file.txt", "gz9:mem:file.txt.gz" )
USE test
APPEND FROM "gz:mem:file.txt.gz"
hb_vfErase( "mem:file.txt.gz" )
or:
REQUEST HB_GZIO
FUNCTION GZIP( cFile )
RETURN hb_vfCopy( cFile, "GZ:" + cFile + ".gz" )
Have a fun with new toy in a new year ;)
* contrib/gtwvg/wvgcore.c
* contrib/gtwvg/wvgcuig.c
! Fixed Wvt_DrawImage() and Wvg_Image() where images were not
being rendered correctly if the height of image is greater than
width of the image. The behavior is only affected when <bDoNotScale>
is set to be TRUE. Thanks Sergy for reporting and providing
code to debug.
* contrib/hbnetio/netiosrv.c
! fixed wrongly set error code when last stream is closed.
It was minor problem invisible for client PRG code without any
side effects.
* lock stream mutex a little bit earlier to avoid problems with
future code extensions - i.e. streams closed asynchronously by
other server threads
* contrib/hbnetio/netiocli.c
* allow to send data to currently registered stream.
Now if server stream function sends some data to stream before it
returns then this data is not dropped be client but saved and later
can be accessed by netio_GetData() function
* include/hbstack.h
* src/vm/estack.c
+ added new C function:
HB_ISIZ hb_stackBaseSymbolOffset( PHB_SYMB pSymbol );
it returns offset of pSymbol function frame on HVM stack or -1
if function/procedure pointed by pSymbol is not called.
* contrib/hbnetio/readme.txt
* contrib/hbnetio/netiosrv.c
* contrib/hbnetio/hbnetio.hbx
+ added new server side function:
netio_ServedConnection() -> <pConnectionSocket>
It returns connection served by netio_Server() in current thread and
can be used inside executed RPC functions to access <pConnectionSocket>
* contrib/hbfoxpro/hbfoxpro.hbx
* contrib/hbfoxpro/occurs.prg
+ added FoxPro compatible At() function with 3-rd <nOccurrence>
parameter:
fox_At( <cSubstr>, <cString>, <nOccurrence> ) -> <nPos>
* contrib/hbfoxpro/hbfoxpro.ch
+ added PP rule for At() with FoxPro like 3 parameters,
please remember that such At() extension is not compatible with
xHarbour one so do not include hbcompat.ch or xhb.ch - they
redefines At() with 3 or more parameters to xHarbour compatible
function: hb_At()
* contrib/hbnetio/netiocli.c
* strip connection parameters (server name, port, password,...) from
second parameter of hb_vfRename(), hb_vfLink() and hb_vfSymLink()
functions redirected to HBNETIO if it's the same as in the first
parameter.
Now it's possible to use above functions with path containing connection
parameters in second argument. Please only remember that both parameters
have to point to the same server in above functions. If not then DOS
error 2 is set.
In case of hb_vfCopy() the parameters can point to different servers
so it's possible to copy files between different HBNETIO servers or
even different Harbour File IO redirectors.
* src/rtl/hbcom.c
* src/rtl/gtcrs/gtcrs.c
* src/rtl/gtpca/gtpca.c
* src/rtl/gtstd/gtstd.c
* src/rtl/gttrm/gttrm.c
* added workaround for bug in some Linux kernels (i.e.
3.13.0-64-generic Ubuntu) in which select() unconditionally
accepts terminal device for reading if c_cc[ VMIN ] = 0
It's very serious problem, i.e. in GTTRM no input is possible
in such kernels without this workaround.
* src/rtl/dirscan.prg
* modified hb_DirScan() and hb_DirRemoveAll() to work with Harbour
File IO API (hb_vf*() functions)
+ added new PRG function:
hb_FileDelete( <cFileMask> [, <cAttr> ] ) -> <lResult>
this function removes files which match given <cFileMask>
(it may contain path) and returns .T. if at least one file
was deleted. Optional <cAttr> parameter can be used to include
system ("S") and hidden ("H") files. If <cAttr> contains "R"
letter then before deleting READONLY attribute is removed from
files (it's necessary to remove files with READONLY attribute
in systems like DOS, MS-Windows or OS2). This function uses
Harbour File IO API (hb_vf*() functions)
* remove READONLY attribute from files in hb_DirRemoveAll()
* include/harbour.hbx
+ added hb_DirRemoveAll() and hb_FileDelete()
* contrib/hbct/files.c
! do not allow to remove empty directories by FileDelete() function
even if user explicitly sets directory attribute - CT3 compatible fix.
! remove READONLY attribute before deleting READONLY files if 2-nd
parameter of FileDelete() contains READONLY bit
* src/rtl/filesys.c
* formatting
* ChangeLog.txt
! typo
* contrib/hbhpdf/3rd/libhpdf/hpdfimac.c
! removed obsolete memory.h
* contrib/hbhpdf/3rd/libhpdf/libhpdf.dif
* rediffed
* include/hbdate.h
* enabled reentrant safe version of localtime() and gmtime() in all
OpenWatcom builds
* include/hbapifs.h
* src/rtl/filebuf.c
* added new C function hb_fileLoadData() - it can be used to load data
from already opened regular files and streams
* include/harbour.hbx
* src/rtl/vfile.c
+ added new PRG function:
hb_vfLoad( <cFileName>, [ <nMaxSize> ] ) -> <cFileBody> | NIL
* src/vm/runner.c
* use hb_fileLoadData()
* contrib/hbwin/win_bmp.c
* use hb_fileLoad()