Hi Christina, On Wednesday, 2013-02-06 13:44:09 +0100, Christina Roßmanith wrote:
- for (xub_StrLen i = (xub_StrLen)(aStr.Len()-1); i > 0; i++ ) + for (sal_Int32 i = aStr.getLength()-1; i > 0; i++ ) { - if ( (aStr.GetChar( i ) >= '0') && (aStr.GetChar( i ) <= '9') ) + if ( (aStr[i] >= '0') && (aStr[i] <= '9') ) break; - else if ( aStr.GetChar( i ) == '-' ) + else if ( aStr[i] == '-' ) { bNegative = sal_True; break;In for (sal_Int32 i = aStr.getLength()-1; i > 0; i++ ) i starts with at least -1 is tested to be non negative and incremented. Is this code ever used??? Or am I failing to see the magic behind the scenes?No, that code doesn't make sense and to me looks it should be for (sal_Int32 i = aStr.getLength()-1; i > 0; --i) Awkward guessing of negative currency formats anyway..Do you think it is ever used?
It probably is, when a currency amount is entered in such field.
It would be an endless loop, wouldn't it?!?
Not really endless ;-) in some cases the old code would access invalid memory and probably bail out earlier.. In other cases we were lucky if aStr ended in a digit or '-'
The question is modify to --i or remove some code.
Changing to --i at least does what the code aimed for, detecting backwards if a character is digit or '-' for these nFormat values:
+ if ( (nFormat == 3) || (nFormat == 6) || // $1- || 1-$ + (nFormat == 7) || (nFormat == 10) ) // 1$- || 1 $- I've added them as a comment because the numerical codes for the various formats are quite non intuitive.
Agreed, it's a legacy from pre-i18n-framework-times and we could have proper named constants instead. Eike -- LibreOffice Calc developer. Number formatter stricken i18n transpositionizer. New GnuPG key 0x65632D3A : 2265 D7F3 A7B0 95CC 3918 630B 6A6C D5B7 6563 2D3A Old GnuPG key 0x293C05FD : 997A 4C60 CE41 0149 0DB3 9E96 2F1A D073 293C 05FD Support the FSFE, care about Free Software! https://fsfe.org/support/?erack
Attachment:
pgpBS1_yjOJRi.pgp
Description: PGP signature