Robert Shearman : oleaut32: Fix parsing of hex numbers with 'e'
in the string by moving
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 3 05:22:46 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 123592f0c314efc801724a524a96f091857a6ae0
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=123592f0c314efc801724a524a96f091857a6ae0
Author: Robert Shearman <rob at codeweavers.com>
Date: Sat Jul 1 13:28:52 2006 +0100
oleaut32: Fix parsing of hex numbers with 'e' in the string by moving
the exponent parsing to after the hex digit parsing.
---
dlls/oleaut32/tests/vartest.c | 8 +++++---
dlls/oleaut32/variant.c | 35 ++++++++++++++++++-----------------
2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index e8e4654..51c75e2 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -957,13 +957,15 @@ static void test_VarParseNumFromStr(void
EXPECTRGB(4,FAILDIG);
/* VB hex lower case and leading zero */
- CONVERT("&h0abcd", NUMPRS_HEX_OCT);
- EXPECT(4,NUMPRS_HEX_OCT,0x40,7,4,0);
+ CONVERT("&h0abcdef", NUMPRS_HEX_OCT);
+ EXPECT(6,NUMPRS_HEX_OCT,0x40,9,4,0);
EXPECTRGB(0,10);
EXPECTRGB(1,11);
EXPECTRGB(2,12);
EXPECTRGB(3,13);
- EXPECTRGB(4,FAILDIG);
+ EXPECTRGB(4,14);
+ EXPECTRGB(5,15);
+ EXPECTRGB(6,FAILDIG);
/* VB oct */
CONVERT("&O300", NUMPRS_HEX_OCT);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index ddeeabb..5ea767f 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -1732,23 +1732,6 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
}
}
}
- else if ((*lpszStr == 'e' || *lpszStr == 'E') &&
- pNumprs->dwInFlags & NUMPRS_EXPONENT &&
- !(pNumprs->dwOutFlags & NUMPRS_EXPONENT))
- {
- dwState |= B_PROCESSING_EXPONENT;
- pNumprs->dwOutFlags |= NUMPRS_EXPONENT;
- cchUsed++;
- }
- else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol)
- {
- cchUsed++; /* Ignore positive exponent */
- }
- else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol)
- {
- dwState |= B_NEGATIVE_EXPONENT;
- cchUsed++;
- }
else if (((*lpszStr >= 'a' && *lpszStr <= 'f') ||
(*lpszStr >= 'A' && *lpszStr <= 'F')) &&
dwState & B_PROCESSING_HEX)
@@ -1767,6 +1750,23 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
pNumprs->cDig++;
cchUsed++;
}
+ else if ((*lpszStr == 'e' || *lpszStr == 'E') &&
+ pNumprs->dwInFlags & NUMPRS_EXPONENT &&
+ !(pNumprs->dwOutFlags & NUMPRS_EXPONENT))
+ {
+ dwState |= B_PROCESSING_EXPONENT;
+ pNumprs->dwOutFlags |= NUMPRS_EXPONENT;
+ cchUsed++;
+ }
+ else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol)
+ {
+ cchUsed++; /* Ignore positive exponent */
+ }
+ else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol)
+ {
+ dwState |= B_NEGATIVE_EXPONENT;
+ cchUsed++;
+ }
else
break; /* Stop at an unrecognised character */
@@ -1783,6 +1783,7 @@ HRESULT WINAPI VarParseNumFromStr(OLECHA
if (pNumprs->dwOutFlags & NUMPRS_EXPONENT && dwState & B_PROCESSING_EXPONENT)
{
pNumprs->cchUsed = cchUsed;
+ WARN("didn't completely parse exponent\n");
return DISP_E_TYPEMISMATCH; /* Failed to completely parse the exponent */
}
More information about the wine-cvs
mailing list