From 9b92918193ed1cdf10f2d3030296b9ab06bdee02 Mon Sep 17 00:00:00 2001 From: "Alexander S.Kresin" Date: Mon, 29 Sep 2003 18:07:46 +0000 Subject: [PATCH] 2003-09-29 22:10 UTC+0300 Alexander Kresin --- harbour/ChangeLog | 6 ++++++ harbour/source/rtl/strcase.c | 34 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 8f6fbf53fd..bc5acbbc58 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,12 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2003-09-29 22:10 UTC+0300 Alexander Kresin + *source/rtl/strcase.c + ! hb_strncpyUpperTrim() is fixed ( borrowed from xHarbour ). + * include/hbver.h + * Release info has been corrected again ... + 2003-09-29 15:20 UTC+0300 Alexander Kresin *source/rtl/strcase.c ! hb_strncpyUpper() is fixed ( borrowed from xHarbour ). diff --git a/harbour/source/rtl/strcase.c b/harbour/source/rtl/strcase.c index 53685cce0b..3bdaa7802d 100644 --- a/harbour/source/rtl/strcase.c +++ b/harbour/source/rtl/strcase.c @@ -126,22 +126,36 @@ char * hb_strncpyUpper( char * pDest, const char * pSource, ULONG ulLen ) */ char * hb_strncpyUpperTrim( char * pDest, const char * pSource, ULONG ulLen ) { - HB_TRACE(HB_TR_DEBUG, ("hb_strncpyUpper(%p, %s, %lu)", pDest, pSource, ulLen)); + char *pBuf = pDest; + LONG ulSLen = strlen( pSource ); + + HB_TRACE(HB_TR_DEBUG, ("hb_strncpyUpperTrim(%p, %s, %lu)", pDest, pSource, ulLen)); pDest[ ulLen ] ='\0'; - while( ulLen-- && pSource[ ulLen ] == ' ') - pDest[ ulLen ] = '\0'; - - ulLen++; - while( ulLen-- ) + while( ulSLen && pSource[ ulSLen - 1 ] == ' ') { - /* some compilers impliment toupper as a macro, and this has side effects! */ - /* *pDest++ = toupper( *pSource++ ); */ - pDest[ ulLen ] = toupper( (unsigned char) pSource[ ulLen ] ); + ulSLen--; } - return pDest; + /* some compilers impliment toupper as a macro, and this has side effects! */ + /* *pDest++ = toupper( *pSource++ ); */ + while( ulLen && ulSLen && (*pDest++ = toupper( *pSource ))) + { + ulSLen--; + ulLen--; + pSource++; + } + + if( ulLen ) + { + while (--ulLen) + { + *pDest++ = '\0'; + } + } + + return pBuf; }