2010-12-09 11:46 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hblzf/hblzf.c
* contrib/hblzf/tests/test.prg
! Rearranged to not have code after hb_err*() call.
% Deleted HB_IS*() checks before hb_stor*() call. (unnecessary)
! Fixed formatting to comply with Harbour style. Pls don't
reformat it with local style.
+ Added TOFIX: eliminate static vars for MT compliance
+ Added TOFIX: eliminate reliance on errno.h, as it's not present on
some systems.
* Renamed HB_LZF_DECOMPRESS()/HB_LZF_COMPRESS() to not have HB_
prefix. (HB_ prefix is only needed for functions which are not
strict wrappers)
! Fixed HB_LZF_DELTA(), HB_LZF_BUFFERSIZE() to only set settings
when parameter was passed. To reset to default value: pass NIL.
This makes it possible to read these values without resetting them.
! Fixed LZF_DECOMPRESS() to allocate space for termination byte,
this also fixes allocating zero bytes when empty string is passed.
* contrib/hblzf/hblzf.hbp
* Minor formatting.
* INSTALL
! Restored my latest change. Please ALWAYS update before commit.
(and needless to say, work in local SVN sandbox, instead of
copying in changes from elsewhere)
This commit is contained in:
@@ -16,6 +16,33 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2010-12-09 11:46 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hblzf/hblzf.c
|
||||
* contrib/hblzf/tests/test.prg
|
||||
! Rearranged to not have code after hb_err*() call.
|
||||
% Deleted HB_IS*() checks before hb_stor*() call. (unnecessary)
|
||||
! Fixed formatting to comply with Harbour style. Pls don't
|
||||
reformat it with local style.
|
||||
+ Added TOFIX: eliminate static vars for MT compliance
|
||||
+ Added TOFIX: eliminate reliance on errno.h, as it's not present on
|
||||
some systems.
|
||||
* Renamed HB_LZF_DECOMPRESS()/HB_LZF_COMPRESS() to not have HB_
|
||||
prefix. (HB_ prefix is only needed for functions which are not
|
||||
strict wrappers)
|
||||
! Fixed HB_LZF_DELTA(), HB_LZF_BUFFERSIZE() to only set settings
|
||||
when parameter was passed. To reset to default value: pass NIL.
|
||||
This makes it possible to read these values without resetting them.
|
||||
! Fixed LZF_DECOMPRESS() to allocate space for termination byte,
|
||||
this also fixes allocating zero bytes when empty string is passed.
|
||||
|
||||
* contrib/hblzf/hblzf.hbp
|
||||
* Minor formatting.
|
||||
|
||||
* INSTALL
|
||||
! Restored my latest change. Please ALWAYS update before commit.
|
||||
(and needless to say, work in local SVN sandbox, instead of
|
||||
copying in changes from elsewhere)
|
||||
|
||||
2010-12-09 12:10 UTC+0200 Petr Chornyj (myorg63 at mail.ru)
|
||||
* contrib/3rd/sqlite3/sqlite3.c
|
||||
* contrib/3rd/sqlite3/sqlite3.h
|
||||
@@ -29,7 +56,7 @@
|
||||
* contrib/hbsqlit3/hbsqlit3.c
|
||||
+ Added sqlite3_blob_reopen(), sqlite3_stmt_readonly()
|
||||
+ sqlite3_enable_load_extension() function guarded with SQLITE_OMIT_LOAD_EXTENSION
|
||||
It's needed for some 3rd sqlite extension,
|
||||
It's needed for some 3rd sqlite extension,
|
||||
f.e. SQLCIPHER for security reasons
|
||||
|
||||
+ contrib/hblzf
|
||||
|
||||
@@ -1659,7 +1659,7 @@ HARBOUR
|
||||
|
||||
|
||||
|
||||
[ Copyright (c) 2009-2010 Viktor Szakats (harbour.01 syenar.hu)
|
||||
[ Copyright (c) 2009-2011 Viktor Szakats (harbour.01 syenar.hu)
|
||||
Licensed under Creative Commons Attribution-ShareAlike 3.0:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
See COPYING. ]
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/* TOFIX: Some platforms don't have this. Build breaker. */
|
||||
#include <errno.h>
|
||||
|
||||
#include "hbapi.h"
|
||||
@@ -67,11 +68,12 @@
|
||||
|
||||
#define LZF_BUFFSIZE 1024
|
||||
|
||||
/* TOFIX: Make it MT compatible */
|
||||
HB_SIZE s_delta = 0;
|
||||
HB_SIZE s_buffer_size = LZF_BUFFSIZE;
|
||||
|
||||
/**
|
||||
Return a LZF_VERSION, API version
|
||||
Return a LZF_VERSION, API version
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_VERSION )
|
||||
@@ -79,8 +81,8 @@ HB_FUNC( HB_LZF_VERSION )
|
||||
hb_retni( LZF_VERSION );
|
||||
}
|
||||
|
||||
/**
|
||||
Return 1 if lzf was optimized for speed, 0 for compression
|
||||
/**
|
||||
Return 1 if lzf was optimized for speed, 0 for compression
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_OPTIMIZED_FOR )
|
||||
@@ -88,104 +90,104 @@ HB_FUNC( HB_LZF_OPTIMIZED_FOR )
|
||||
hb_retni( HB_LZF_OPTIMIZED_FOR );
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_DELTA )
|
||||
{
|
||||
hb_retni( s_delta );
|
||||
s_delta = (HB_SIZE) hb_parnidef( 1, 0 );
|
||||
if( hb_pcount() >= 1 )
|
||||
s_delta = ( HB_SIZE ) hb_parnidef( 1, 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_BUFFERSIZE )
|
||||
{
|
||||
hb_retni( s_buffer_size );
|
||||
s_buffer_size = (HB_SIZE) hb_parnidef( 1, LZF_BUFFSIZE );
|
||||
if( hb_pcount() >= 1 )
|
||||
s_buffer_size = ( HB_SIZE ) hb_parnidef( 1, LZF_BUFFSIZE );
|
||||
}
|
||||
|
||||
/**
|
||||
Return a string compressed with LZF
|
||||
Return a string compressed with LZF
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_COMPRESS )
|
||||
HB_FUNC( LZF_COMPRESS )
|
||||
{
|
||||
PHB_ITEM pArg = hb_param( 1, HB_IT_STRING );
|
||||
const char *in_data = NULL;
|
||||
char *out_data;
|
||||
HB_SIZE in_len, out_len;
|
||||
unsigned int uiResult;
|
||||
|
||||
if( pArg != NULL )
|
||||
{
|
||||
const char * in_data = NULL;
|
||||
char * out_data;
|
||||
HB_SIZE in_len, out_len;
|
||||
unsigned int uiResult;
|
||||
|
||||
in_data = hb_itemGetCPtr( pArg );
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
in_len = hb_itemGetCLen( pArg );
|
||||
out_len = in_len + ( ( s_delta ) ? s_delta : ( ( HB_SIZE ) ( in_len * 1.04 ) + 1 ) );
|
||||
|
||||
in_len = hb_itemGetCLen( pArg );
|
||||
out_len = in_len + ( (s_delta) ? s_delta : ( ( HB_SIZE ) ( in_len * 1.04 ) + 1 ) );
|
||||
out_data = ( char * ) hb_xgrab( out_len + 1 );
|
||||
|
||||
out_data = (char *) hb_xgrab( out_len );
|
||||
|
||||
uiResult = lzf_compress( in_data, in_len, out_data, out_len );
|
||||
if ( uiResult == 0 )
|
||||
{
|
||||
hb_xfree( out_data );
|
||||
hb_retc_null();
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_retclen_buffer( out_data, uiResult );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Return a string decompressed with LZF
|
||||
*/
|
||||
|
||||
HB_FUNC( HB_LZF_DECOMPRESS )
|
||||
{
|
||||
PHB_ITEM pArg = hb_param( 1, HB_IT_STRING );
|
||||
const char *in_data = NULL;
|
||||
char *buffer;
|
||||
HB_SIZE in_len, buffer_size, i = 1;
|
||||
unsigned int uiResult;
|
||||
|
||||
if( pArg != NULL )
|
||||
in_data = hb_itemGetCPtr( pArg );
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
in_len = hb_itemGetCLen( pArg );
|
||||
buffer_size = s_buffer_size;
|
||||
|
||||
buffer = hb_xgrab( buffer_size );
|
||||
|
||||
do
|
||||
{
|
||||
buffer_size *= i++;
|
||||
buffer = hb_xrealloc( buffer, buffer_size );
|
||||
|
||||
uiResult = lzf_decompress( in_data, in_len, buffer, buffer_size );
|
||||
} while ( uiResult == 0 && errno == E2BIG );
|
||||
|
||||
if ( uiResult == 0 )
|
||||
{
|
||||
if ( errno == EINVAL )
|
||||
uiResult = lzf_compress( in_data, in_len, out_data, out_len );
|
||||
if( uiResult == 0 )
|
||||
{
|
||||
HB_TRACE( HB_TR_DEBUG, "LZF decompression failed, compressed data corrupted" );
|
||||
hb_xfree( out_data );
|
||||
hb_retc_null();
|
||||
}
|
||||
else
|
||||
hb_retclen_buffer( out_data, uiResult );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
if( hb_pcount() > 1 && (HB_ISNUM(2) && HB_ISBYREF(2)) )
|
||||
/**
|
||||
Return a string decompressed with LZF
|
||||
*/
|
||||
|
||||
HB_FUNC( LZF_DECOMPRESS )
|
||||
{
|
||||
PHB_ITEM pArg = hb_param( 1, HB_IT_STRING );
|
||||
|
||||
if( pArg != NULL )
|
||||
{
|
||||
const char * in_data = NULL;
|
||||
char * buffer;
|
||||
HB_SIZE in_len, buffer_size, i = 1;
|
||||
unsigned int uiResult;
|
||||
|
||||
in_data = hb_itemGetCPtr( pArg );
|
||||
in_len = hb_itemGetCLen( pArg );
|
||||
buffer_size = s_buffer_size;
|
||||
|
||||
buffer = hb_xgrab( buffer_size + 1 );
|
||||
|
||||
do
|
||||
{
|
||||
buffer_size *= i++;
|
||||
buffer = hb_xrealloc( buffer, buffer_size );
|
||||
|
||||
uiResult = lzf_decompress( in_data, in_len, buffer, buffer_size );
|
||||
} while( uiResult == 0 && errno == E2BIG );
|
||||
|
||||
if( uiResult == 0 )
|
||||
{
|
||||
if( errno == EINVAL )
|
||||
{
|
||||
HB_TRACE( HB_TR_DEBUG, "LZF decompression failed, compressed data corrupted" );
|
||||
|
||||
hb_storni( errno, 2 );
|
||||
}
|
||||
|
||||
hb_xfree( buffer );
|
||||
hb_retc_null();
|
||||
}
|
||||
hb_xfree( buffer );
|
||||
hb_retc_null();
|
||||
else
|
||||
hb_retclen_buffer( buffer, uiResult );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_retclen_buffer( buffer, uiResult );
|
||||
}
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
-depincpathlocal=lzf:3rd/liblzf
|
||||
-depfinish=lzf
|
||||
|
||||
|
||||
hblzf.c
|
||||
|
||||
3rd/liblzf/lzf.hbc{HBMK_HAS_LZF_LOCAL}
|
||||
|
||||
@@ -10,24 +10,24 @@
|
||||
#define EINVAL 22 /* Invalid argument */
|
||||
|
||||
PROCEDURE Main()
|
||||
LOCAL cStr, str_compressed, str_decompressed
|
||||
LOCAL b64_expected_result := "BFRoaXMgIAIUdGVzdCBvZiBMWkYgZXh0ZW5zaW9u"
|
||||
LOCAL cStr, str_compressed, str_decompressed
|
||||
LOCAL b64_expected_result := "BFRoaXMgIAIUdGVzdCBvZiBMWkYgZXh0ZW5zaW9u"
|
||||
LOCAL errno := 0
|
||||
|
||||
? "LZF Api version is", ;
|
||||
hb_ntos( hb_lzf_version() ) + "(" + hb_numtohex(hb_lzf_version()) +")"
|
||||
hb_ntos( hb_lzf_version() ) + "(" + hb_numtohex( hb_lzf_version() ) +")"
|
||||
? "LibLZF optimized for", iif( hb_lzf_optimized_for() > 0, "speed.", "compression." )
|
||||
|
||||
? "--- test 1 ---"
|
||||
/*
|
||||
Lenght of output buffer is calculated as out_len := in_len + delta
|
||||
If the output buffer is not large enough or any error occurs
|
||||
If the output buffer is not large enough or any error occurs
|
||||
hb_lzf_compress return 0
|
||||
*/
|
||||
hb_lzf_delta( -1 )
|
||||
|
||||
cStr := TEST_STRING
|
||||
str_compressed := hb_lzf_compress( cStr )
|
||||
str_compressed := lzf_compress( cStr )
|
||||
|
||||
? "Lenght of a string is", hb_ntos( Len( cStr ) )
|
||||
? "Lenght of a compressed string is", hb_ntos( Len( str_compressed ) )
|
||||
@@ -37,10 +37,10 @@ PROCEDURE Main()
|
||||
By default ( delta == 0 ) lenght of output buffer is
|
||||
int( len( data_in ) * 1.04 ) + 1
|
||||
*/
|
||||
hb_lzf_delta()
|
||||
hb_lzf_delta( NIL )
|
||||
|
||||
cStr := TEST_STRING
|
||||
str_compressed := hb_lzf_compress( cStr )
|
||||
str_compressed := lzf_compress( cStr )
|
||||
|
||||
? "Lenght of a string is", hb_ntos( Len( cStr ) )
|
||||
? "Lenght of a compressed string is", hb_ntos( Len( str_compressed ) )
|
||||
@@ -49,16 +49,16 @@ PROCEDURE Main()
|
||||
|
||||
? "--- test 3 ---"
|
||||
cStr := Replicate( TEST_STRING, _NREPL_ )
|
||||
str_compressed := hb_lzf_compress( cStr )
|
||||
str_compressed := lzf_compress( cStr )
|
||||
|
||||
? "Lenght of a string is", hb_ntos( Len( cStr ) )
|
||||
? "Lenght of a compressed string is", hb_ntos( Len( str_compressed ) )
|
||||
|
||||
? "--- test 4 ---"
|
||||
? hb_lzf_bufferSize()
|
||||
str_decompressed := hb_lzf_decompress( str_compressed, @errno )
|
||||
? hb_lzf_bufferSize( NIL )
|
||||
str_decompressed := lzf_decompress( str_compressed, @errno )
|
||||
|
||||
IF errno == EINVAL
|
||||
IF errno == EINVAL
|
||||
? "LZF decompression failed, compressed data corrupted"
|
||||
ELSE
|
||||
? cStr == str_decompressed
|
||||
|
||||
Reference in New Issue
Block a user