GetNumberFormatA correction
Medland, Bill
Bill.Medland at accpac.com
Mon Nov 25 17:45:09 CST 2002
Bill Medland (medbi01 at accpac.com)
Correct GetNumberFormatA for zero decimals and for zero grouping
Index: wine/dlls/kernel/tests/locale.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/locale.c,v
retrieving revision 1.6
diff -u -r1.6 locale.c
--- wine/dlls/kernel/tests/locale.c 8 Nov 2002 18:51:56 -0000 1.6
+++ wine/dlls/kernel/tests/locale.c 25 Nov 2002 23:39:20 -0000
@@ -285,6 +285,7 @@
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 @@
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);
+
}
Index: wine/ole/ole2nls.c
===================================================================
RCS file: /home/wine/wine/ole/ole2nls.c,v
retrieving revision 1.107
diff -u -r1.107 ole2nls.c
--- wine/ole/ole2nls.c 8 Nov 2002 18:51:56 -0000 1.107
+++ wine/ole/ole2nls.c 25 Nov 2002 23:39:28 -0000
@@ -2230,6 +2230,7 @@
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 @@
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 @@
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)
More information about the wine-patches
mailing list