From b340a03cb540738285b4e891e8448196db58b2ee Mon Sep 17 00:00:00 2001 From: Eddie Runia Date: Fri, 16 Jul 1999 14:11:29 +0000 Subject: [PATCH] See changelog --- harbour/ChangeLog | 4 + harbour/source/rtl/transfrm.c | 292 +++++++++++++++++----------------- 2 files changed, 147 insertions(+), 149 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 515cf24e8a..712bc12cc7 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,7 @@ +19990716-16:00 CET Eddie Runia + * source/rtl/transfrm.c + Memory allocation error resolved + 19990716-15:00 CET Eddie Runia * source/rtl/math.c Round() : One byte more should be allocated diff --git a/harbour/source/rtl/transfrm.c b/harbour/source/rtl/transfrm.c index e104605cf6..466dbc3129 100644 --- a/harbour/source/rtl/transfrm.c +++ b/harbour/source/rtl/transfrm.c @@ -184,7 +184,7 @@ char *NumPicture( char *szPic, long lPic, int iPicFlags, double dValue, iCount = 0; - szRet = (char *) hb_xgrab( lPic+4 ); /* Grab enough */ + szRet = (char *) hb_xgrab( lPic+4 ); /* Grab enough */ *szRet = 0; for( i=0; iitem.asString.length ) + if( *szPic == '@' ) /* Function marker found */ { - if( *szPic == '@' ) /* Function marker found */ - { - iPicFlags = PictFunc( &szPic, &lPic ); /* Get length of function*/ - lPicStart = pPic->item.asString.length - lPic; /* Get start of template */ - } + iPicFlags = PictFunc( &szPic, &lPic ); /* Get length of function*/ + lPicStart = pPic->item.asString.length - lPic; + /* Get start of template */ + } - switch( pExp->type & ~IT_BYREF ) + switch( pExp->type & ~IT_BYREF ) + { + case IT_STRING: { - case IT_STRING: - { - szExp = pExp->item.asString.value; - szResult = (char *)hb_xgrab( ( (lPic-lPicStart) > pExp->item.asString.length) ? - (lPic-lPicStart) + 1 : pExp->item.asString.length + 1 ); + szExp = pExp->item.asString.value; + szResult = (char *)hb_xgrab( ( (lPic-lPicStart) > pExp->item.asString.length) ? + (lPic-lPicStart) + 64 : pExp->item.asString.length + 64 ); /* Grab enough */ - szPic += lPicStart; /* Skip functions */ + szPic += lPicStart; /* Skip functions */ - if( iPicFlags & PF_UPPER ) /* Function : @! */ + if( iPicFlags & PF_UPPER ) /* Function : @! */ + { + szTemp = szExp; /* Convert to upper */ + for( n = pExp->item.asString.length; n ; n--) { - szTemp = szExp; /* Convert to upper */ - for( n = pExp->item.asString.length; n ; n--) - { - *szTemp = toupper( *szTemp ); - szTemp++; - } + *szTemp = toupper( *szTemp ); + szTemp++; } - - if( lPic ) /* Template string */ - { - while( lPic && lExpPos < pExp->item.asString.length ) - { /* Analyze picture mask */ - switch( *szPic ) - { - case '!': /* Upper */ - { - szResult[lResultPos++] = toupper(szExp[lExpPos++]); - break; - } - case 'L': /* Ignored */ - case 'Y': - case '*': - case '$': - case '.': - case ',': - break; - - case '#': /* Out the character */ - case '9': - case 'A': - case 'N': - case 'X': - case ' ': - { - szResult[lResultPos++] = szExp[lExpPos++]; - break; - } - - default: /* Other choices */ - { - szResult[lResultPos++] = *szPic; - lExpPos++; - } - } - szPic++; - lPic--; - } - } - else if( iPicFlags & (PF_UPPER + PF_REMAIN) ) - { /* Without template */ - for( n = pExp->item.asString.length; n; n--) - szResult[lResultPos++] = *szExp++; - } - - if( ( iPicFlags & PF_REMAIN ) && lPic ) /* Any chars left */ - { - for( n = lPic; n; n--) - szResult[lResultPos++] = *szPic; /* Export remainder */ - } - hb_retclen(szResult, lResultPos); - hb_xfree(szResult); - break; } - case IT_LOGICAL: + if( lPic ) /* Template string */ { - szResult = (char *) hb_xgrab( lPic + 1 ); - /* That's all folks */ - szPic += lPicStart; /* Skip functions */ - lResultPos = 1; - - if( lPic ) /* Template string */ - { + while( lPic && lExpPos < pExp->item.asString.length ) + { /* Analyze picture mask */ switch( *szPic ) { - case 'Y': /* Yes/No */ + case '!': /* Upper */ { - *szResult = pExp->item.asLogical.value ? 'Y' : 'N'; - szPic++; - lPic--; - bDone = TRUE; /* Logical written */ + szResult[lResultPos++] = toupper(szExp[lExpPos++]); + break; + } + case 'L': /* Ignored */ + case 'Y': + case '*': + case '$': + case '.': + case ',': + break; + + case '#': /* Out the character */ + case '9': + case 'A': + case 'N': + case 'X': + case ' ': + { + szResult[lResultPos++] = szExp[lExpPos++]; break; } - case '#': - case 'L': /* True/False */ + default: /* Other choices */ { - *szResult = pExp->item.asLogical.value ? 'T' : 'F'; - szPic++; - lPic--; - bDone = TRUE; - break; - } - - default: - { - *szResult = *szPic++; - lPic--; + szResult[lResultPos++] = *szPic; + lExpPos++; } } + szPic++; + lPic--; } - if( ( iPicFlags & PF_REMAIN ) && lPic ) /* Any chars left */ - { - for( n = lPic; n; n--) /* Copy remainder */ - szResult[lResultPos++] = *szPic++; - if( !bDone ) /* Logical written ? */ - szResult[lResultPos++] = pExp->item.asLogical.value ? 'T' : 'F'; - } - hb_retclen( szResult, lResultPos ); - hb_xfree( szResult ); - break; } - case IT_INTEGER: + else if( iPicFlags & (PF_UPPER + PF_REMAIN) ) + { /* Without template */ + for( n = pExp->item.asString.length; n; n--) + szResult[lResultPos++] = *szExp++; + } + + if( ( iPicFlags & PF_REMAIN ) && lPic ) /* Any chars left */ { - szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, - (double) pExp->item.asInteger.value, &lResultPos ); - hb_retclen( szResult, lResultPos ); - hb_xfree( szResult ); - break; - } - case IT_LONG: - { - szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, - (double) pExp->item.asLong.value, &lResultPos ); - hb_retclen( szResult, lResultPos ); - hb_xfree( szResult ); - break; - } - case IT_DOUBLE: - { - szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, - (double) pExp->item.asDouble.value, &lResultPos ); - hb_retclen( szResult, lResultPos); - hb_xfree( szResult ); - break; - } - case IT_DATE: - { - char szResult[ 11 ]; - DatePicture( hb_pards( 1 ), iPicFlags, szResult, &lResultPos ); - hb_retclen( szResult, lResultPos ); - break; - } - default: - { - hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); + for( n = lPic; n; n--) + szResult[lResultPos++] = *szPic; /* Export remainder */ } + hb_retclen(szResult, lResultPos); + hb_xfree(szResult); + break; + } + + case IT_LOGICAL: + { + szResult = (char *) hb_xgrab( lPic + 1 ); + /* That's all folks */ + szPic += lPicStart; /* Skip functions */ + lResultPos = 1; + + if( lPic ) /* Template string */ + { + switch( *szPic ) + { + case 'Y': /* Yes/No */ + { + *szResult = pExp->item.asLogical.value ? 'Y' : 'N'; + szPic++; + lPic--; + bDone = TRUE; /* Logical written */ + break; + } + + case '#': + case 'L': /* True/False */ + { + *szResult = pExp->item.asLogical.value ? 'T' : 'F'; + szPic++; + lPic--; + bDone = TRUE; + break; + } + + default: + { + *szResult = *szPic++; + lPic--; + } + } + } + if( ( iPicFlags & PF_REMAIN ) && lPic ) /* Any chars left */ + { + for( n = lPic; n; n--) /* Copy remainder */ + szResult[lResultPos++] = *szPic++; + if( !bDone ) /* Logical written ? */ + szResult[lResultPos++] = pExp->item.asLogical.value ? 'T' : 'F'; + } + hb_retclen( szResult, lResultPos ); + hb_xfree( szResult ); + break; + } + case IT_INTEGER: + { + szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, + (double) pExp->item.asInteger.value, &lResultPos ); + hb_retclen( szResult, lResultPos ); + hb_xfree( szResult ); + break; + } + case IT_LONG: + { + szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, + (double) pExp->item.asLong.value, &lResultPos ); + hb_retclen( szResult, lResultPos ); + hb_xfree( szResult ); + break; + } + case IT_DOUBLE: + { + szResult = NumPicture( szPic + lPicStart, lPic, iPicFlags, + (double) pExp->item.asDouble.value, &lResultPos ); + hb_retclen( szResult, lResultPos); + hb_xfree( szResult ); + break; + } + case IT_DATE: + { + char szResult[ 11 ]; + DatePicture( hb_pards( 1 ), iPicFlags, szResult, &lResultPos ); + hb_retclen( szResult, lResultPos ); + break; + } + default: + { + hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); } - } - else - { - hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); } } else /* No picture supplied */