2009-01-28 22:28 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/vm/itemapi.c
    % eliminated hb_snpritf() from HB_IT_POINTER conversion in
      hb_itemString()

  * harbour/source/common/hbprintf.c
    ! fixed return value - it should be one less. Thanks to Xavi.
    + added support for I64, I32 and I16 length specifiers - it's
      MS-Windows only extension but it should help in replacing
      native C *printf() calls with Harbour version.
This commit is contained in:
Przemyslaw Czerpak
2009-01-28 21:24:24 +00:00
parent a603105732
commit 0e498e5e77
3 changed files with 43 additions and 19 deletions

View File

@@ -8,6 +8,17 @@
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2009-01-28 22:28 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/itemapi.c
% eliminated hb_snpritf() from HB_IT_POINTER conversion in
hb_itemString()
* harbour/source/common/hbprintf.c
! fixed return value - it should be one less. Thanks to Xavi.
+ added support for I64, I32 and I16 length specifiers - it's
MS-Windows only extension but it should help in replacing
native C *printf() calls with Harbour version.
2009-01-28 19:03 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/common/hbprintf.c
* disabled _finitel() in MSVC builds, added casting to double instead

View File

@@ -1012,6 +1012,27 @@ int hb_snprintf_c( char * buffer, size_t bufsize, const char * format, ... )
length = _L_PTRDIFF_;
c = *format++;
break;
case 'I': /* MS-Windows extension */
if( format[ 0 ] == '6' && format[ 1 ] == '4' )
{
length = _L_LONGLONG_;
format += 2;
c = *format++;
break;
}
else if( format[ 0 ] == '1' && format[ 1 ] == '6' )
{
length = _L_SHORT_;
format += 2;
c = *format++;
break;
}
else if( format[ 0 ] == '3' && format[ 1 ] == '2' )
{
format += 2;
c = *format++;
}
/* no break; */
default:
length = _L_UNDEF_;
break;
@@ -1196,7 +1217,7 @@ int hb_snprintf_c( char * buffer, size_t bufsize, const char * format, ... )
if( bufsize )
buffer[ bufsize - 1 ] = 0;
return ( int ) size;
return ( int ) ( size - 1 );
}
#endif

View File

@@ -2496,29 +2496,21 @@ char * hb_itemString( PHB_ITEM pItem, ULONG * ulLen, BOOL * bFreeReq )
case HB_IT_POINTER:
{
int size = ( sizeof( void * ) << 1 ) + 3; /* n bytes for address + 0x + \0 */
int n;
BOOL bFail = TRUE;
HB_PTRDIFF addr = ( HB_PTRDIFF ) hb_itemGetPtr( pItem );
* ulLen = size - 1;
* bFreeReq = TRUE;
buffer = ( char * ) hb_xgrab( size );
buffer[ 0 ] = '0';
buffer[ 1 ] = 'x';
buffer[ --size ] = '\0';
do
{
n = hb_snprintf( buffer, size, "%p", hb_itemGetPtr( pItem ) );
if( (n > -1) && (n < size) )
{
bFail = FALSE;
}
else
{
if( n > -1 )
size = n + 1;
else
size *= 2;
buffer = ( char * ) hb_xrealloc( buffer, size );
}
UCHAR uc = ( UCHAR ) ( addr & 0xf );
buffer[ --size ] = ( char ) ( uc + ( uc < 10 ? '0' : 'A' - 10 ) );
addr >>= 4;
}
while( bFail );
* ulLen = strlen( buffer );
* bFreeReq = TRUE;
while( size > 2 );
break;
}
default: