Skip to content
Snippets Groups Projects
Commit 5a290897 authored by Bill Medland's avatar Bill Medland Committed by Alexandre Julliard
Browse files

Correct GetNumberFormatA for zero decimals and for zero grouping.

parent 04b10544
No related branches found
No related tags found
No related merge requests found
......@@ -285,6 +285,7 @@ void TestGetNumberFormat()
int ret, error, cmp;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE];
LCID lcid;
NUMBERFMTA format;
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
......@@ -319,6 +320,23 @@ LCID lcid;
cmp = strncmp (Expected, buffer, BUFFER_SIZE);
ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
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,
sprintf(sNumberDigits, "%d",lpFormat->NumDigits);
strcpy(sDecimalSymbol, lpFormat->lpDecimalSep);
sprintf(sDigitsInGroup, "%d;0",lpFormat->Grouping);
/* Win95-WinME only allow 0-9 for grouping, no matter what MSDN says. */
strcpy(sDigitGroupSymbol, lpFormat->lpThousandSep);
sprintf(sILZero, "%d",lpFormat->LeadingZero);
sprintf(sNegNumber, "%d",lpFormat->NegativeOrder);
......@@ -2275,6 +2276,8 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
nStep = nCounter = i = j = 0;
nRuleIndex = 1;
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.
* An internal counter (j) is used in order to know when to
......@@ -2343,7 +2346,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
for (i=0; i<j; i++)
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 */
if (bNegative == TRUE)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment