Author: cwittich Date: Mon Jan 19 03:04:56 2009 New Revision: 38930
URL: http://svn.reactos.org/svn/reactos?rev=38930&view=rev Log: trim leading zeros in GetNumberFormat patch by <zooba at aanet dot com dot au> See issue #3400 for more details.
Modified: trunk/reactos/dll/win32/kernel32/misc/lcformat.c
Modified: trunk/reactos/dll/win32/kernel32/misc/lcformat.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/misc/lcf... ============================================================================== --- trunk/reactos/dll/win32/kernel32/misc/lcformat.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/misc/lcformat.c [iso-8859-1] Mon Jan 19 03:04:56 2009 @@ -1013,6 +1013,7 @@ WCHAR szNegBuff[8]; const WCHAR *lpszNeg = NULL, *lpszNegStart, *szSrc; DWORD dwState = 0, dwDecimals = 0, dwGroupCount = 0, dwCurrentGroupCount = 0; + DWORD dwLeadingZeros = 0; INT iRet;
TRACE("(0x%04lx,0x%08lx,%S,%p,%p,%d)\n", lcid, dwFlags, lpszValue, @@ -1063,7 +1064,11 @@ /* Check the number for validity */ while (*szSrc) { - if (*szSrc >= '0' && *szSrc <= '9') + if (*szSrc == '0' && !(dwState & NF_DIGITS)) + { + dwLeadingZeros++; + } + else if ((*szSrc >= '1' && *szSrc <= '9') || (*szSrc == '0' && (dwState & NF_DIGITS))) { dwState |= NF_DIGITS; if (dwState & NF_ISREAL) @@ -1176,7 +1181,7 @@ dwGroupCount = lpFormat->Grouping == 32 ? 3 : lpFormat->Grouping;
/* Write the remaining whole number digits, including grouping chars */ - while (szSrc >= lpszValue && *szSrc >= '0' && *szSrc <= '9') + while (szSrc >= (lpszValue + dwLeadingZeros) && *szSrc >= '0' && *szSrc <= '9') { if (dwState & NF_ROUND) { @@ -1194,7 +1199,7 @@
dwState |= NF_DIGITS_OUT; dwCurrentGroupCount++; - if (szSrc >= lpszValue && dwCurrentGroupCount == dwGroupCount && *szSrc != '-') + if (szSrc >= (lpszValue + dwLeadingZeros) && dwCurrentGroupCount == dwGroupCount && *szSrc != '-') { LPWSTR lpszGrp = lpFormat->lpThousandSep + strlenW(lpFormat->lpThousandSep) - 1;