Commit 5a290897 authored by Bill Medland's avatar Bill Medland Committed by Alexandre Julliard

Correct GetNumberFormatA for zero decimals and for zero grouping.

parent 04b10544
...@@ -285,6 +285,7 @@ void TestGetNumberFormat() ...@@ -285,6 +285,7 @@ void TestGetNumberFormat()
int ret, error, cmp; int ret, error, cmp;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE]; char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE];
LCID lcid; LCID lcid;
NUMBERFMTA format;
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT ); lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
...@@ -319,6 +320,23 @@ LCID lcid; ...@@ -319,6 +320,23 @@ LCID lcid;
cmp = strncmp (Expected, buffer, BUFFER_SIZE); cmp = strncmp (Expected, buffer, BUFFER_SIZE);
ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected); ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
eq (ret, strlen(Expected)+1, "GetNumberFormat", "%d"); eq (ret, strlen(Expected)+1, "GetNumberFormat", "%d");
/* If the number of decimals is zero there should be no decimal
* separator.
* If the grouping size is zero there should be no grouping symbol
*/
format.NumDigits = 0;
format.LeadingZero = 0;
format.Grouping = 0;
format.NegativeOrder = 0;
format.lpDecimalSep = ".";
format.lpThousandSep = ",";
strcpy (Expected, "123456789");
memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
ret = GetNumberFormatA (0, 0, "123456789.0", &format, buffer, sizeof(buffer));
cmp = strncmp (Expected, buffer ,sizeof(buffer));
ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
} }
......
...@@ -2230,6 +2230,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags, ...@@ -2230,6 +2230,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
sprintf(sNumberDigits, "%d",lpFormat->NumDigits); sprintf(sNumberDigits, "%d",lpFormat->NumDigits);
strcpy(sDecimalSymbol, lpFormat->lpDecimalSep); strcpy(sDecimalSymbol, lpFormat->lpDecimalSep);
sprintf(sDigitsInGroup, "%d;0",lpFormat->Grouping); sprintf(sDigitsInGroup, "%d;0",lpFormat->Grouping);
/* Win95-WinME only allow 0-9 for grouping, no matter what MSDN says. */
strcpy(sDigitGroupSymbol, lpFormat->lpThousandSep); strcpy(sDigitGroupSymbol, lpFormat->lpThousandSep);
sprintf(sILZero, "%d",lpFormat->LeadingZero); sprintf(sILZero, "%d",lpFormat->LeadingZero);
sprintf(sNegNumber, "%d",lpFormat->NegativeOrder); sprintf(sNegNumber, "%d",lpFormat->NegativeOrder);
...@@ -2275,6 +2276,8 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags, ...@@ -2275,6 +2276,8 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
nStep = nCounter = i = j = 0; nStep = nCounter = i = j = 0;
nRuleIndex = 1; nRuleIndex = 1;
nGrouping = OLE_GetGrouping(sRule, nRuleIndex); nGrouping = OLE_GetGrouping(sRule, nRuleIndex);
if (nGrouping == 0) /* If the first grouping is zero */
nGrouping = nNumberDecimal; /* Don't do grouping */
/* Here, we will loop until we reach the end of the string. /* Here, we will loop until we reach the end of the string.
* An internal counter (j) is used in order to know when to * An internal counter (j) is used in order to know when to
...@@ -2343,7 +2346,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags, ...@@ -2343,7 +2346,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
for (i=0; i<j; i++) for (i=0; i<j; i++)
memcpy(sNumber + nCounter+i+strlen(sDecimalSymbol), sDigitsAfterDecimal + i, 1); memcpy(sNumber + nCounter+i+strlen(sDecimalSymbol), sDigitsAfterDecimal + i, 1);
memcpy(sNumber + nCounter+i+strlen(sDecimalSymbol), "\0", 1); memcpy(sNumber + nCounter+i+ (i ? strlen(sDecimalSymbol) : 0), "\0", 1);
/* Is it a negative number */ /* Is it a negative number */
if (bNegative == TRUE) if (bNegative == TRUE)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment