[PATCH] GetCurrencyFormat grouping bug fix
lejcik
lejcik at host.sk
Mon Nov 9 03:41:54 CST 2009
GetCurrencyFormatW() puts group separator between minus sign and the
number
(e.g. '-100' formatted as '$-,100.00'). Fixed the same way as
GetNumberFormatW() does it. Relevant test cases extended to handle this
situation.
Signed-off-by: Viliam Lejcik <lejcik at host.sk>
---
dlls/kernel32/lcformat.c | 2 +-
dlls/kernel32/tests/locale.c | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletions(-)
-------------- next part --------------
diff --git a/dlls/kernel32/lcformat.c b/dlls/kernel32/lcformat.c
index 1b1dfcc..f1b5ba5 100644
--- a/dlls/kernel32/lcformat.c
+++ b/dlls/kernel32/lcformat.c
@@ -1521,7 +1521,7 @@ GetCurrencyFormatW_Error:
dwState |= NF_DIGITS_OUT;
dwCurrentGroupCount++;
- if (szSrc >= lpszValue && dwCurrentGroupCount == dwGroupCount)
+ if (szSrc >= lpszValue && dwCurrentGroupCount == dwGroupCount && *szSrc != '-')
{
LPWSTR lpszGrp = lpFormat->lpThousandSep + strlenW(lpFormat->lpThousandSep) - 1;
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 77fae8b..37dc0aa 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -743,6 +743,18 @@ static void test_GetCurrencyFormatA(void)
ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
EXPECT_LENA; EXPECT_EQA;
+ STRINGSA("235","$235.0"); /* Grouping of a positive number */
+ format.Grouping = 3;
+ ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
+ ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
+ EXPECT_LENA; EXPECT_EQA;
+
+ STRINGSA("-235","$-235.0"); /* Grouping of a negative number */
+ format.NegativeOrder = 2;
+ ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
+ ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
+ EXPECT_LENA; EXPECT_EQA;
+
format.LeadingZero = 1; /* Always provide leading zero */
STRINGSA(".5","$0.5");
ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
@@ -990,6 +1002,18 @@ static void test_GetNumberFormatA(void)
ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
EXPECT_LENA; EXPECT_EQA;
+ STRINGSA("235","235.0"); /* Grouping of a positive number */
+ format.Grouping = 3;
+ ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
+ ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
+ EXPECT_LENA; EXPECT_EQA;
+
+ STRINGSA("-235","-235.0"); /* Grouping of a negative number */
+ format.NegativeOrder = NEG_LEFT;
+ ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
+ ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
+ EXPECT_LENA; EXPECT_EQA;
+
format.LeadingZero = 1; /* Always provide leading zero */
STRINGSA(".5","0.5");
ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer));
More information about the wine-patches
mailing list