Signed-off-by: Francois Gouget fgouget@codeweavers.com --- The only non-totally-trivial change is the VarDateFromStr() implementation. --- dlls/oleaut32/variant.c | 2 +- dlls/oleaut32/vartype.c | 35 ++++++++++++++++++----------------- include/oleauto.h | 30 +++++++++++++++--------------- 3 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index b3a568c355c..fdc402c7a62 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -1607,7 +1607,7 @@ static inline BOOL is_digit(WCHAR c) * - I am unsure if this function should parse non-Arabic (e.g. Thai) * numerals, so this has not been implemented. */ -HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, +HRESULT WINAPI VarParseNumFromStr(const OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig) { VARIANT_NUMBER_CHARS chars; diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c index 4e3c4419567..5eacd43c5ae 100644 --- a/dlls/oleaut32/vartype.c +++ b/dlls/oleaut32/vartype.c @@ -84,7 +84,7 @@ static inline void VARIANT_CopyData(const VARIANT *srcVar, VARTYPE vt, void *pOu
/* Coerce VT_BSTR to a numeric type */ -static HRESULT VARIANT_NumberFromBstr(OLECHAR* pStrIn, LCID lcid, ULONG ulFlags, +static HRESULT VARIANT_NumberFromBstr(const OLECHAR* pStrIn, LCID lcid, ULONG ulFlags, void* pOut, VARTYPE vt) { VARIANTARG dstVar; @@ -421,7 +421,7 @@ HRESULT WINAPI VarI1FromCy(CY cyIn, signed char* pcOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarI1FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut) +HRESULT WINAPI VarI1FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pcOut, VT_I1); } @@ -714,7 +714,7 @@ HRESULT WINAPI VarUI1FromDate(DATE dateIn, BYTE* pbOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarUI1FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut) +HRESULT WINAPI VarUI1FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pbOut, VT_UI1); } @@ -1015,7 +1015,7 @@ HRESULT WINAPI VarI2FromDate(DATE dateIn, SHORT* psOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarI2FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut) +HRESULT WINAPI VarI2FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, psOut, VT_I2); } @@ -1329,7 +1329,7 @@ HRESULT WINAPI VarUI2FromCy(CY cyIn, USHORT* pusOut) * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarUI2FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut) +HRESULT WINAPI VarUI2FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pusOut, VT_UI2); } @@ -1605,7 +1605,7 @@ HRESULT WINAPI VarI4FromDate(DATE dateIn, LONG *piOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if strIn cannot be converted */ -HRESULT WINAPI VarI4FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, LONG *piOut) +HRESULT WINAPI VarI4FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, LONG *piOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, piOut, VT_I4); } @@ -1914,7 +1914,7 @@ HRESULT WINAPI VarUI4FromCy(CY cyIn, ULONG *pulOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if strIn cannot be converted */ -HRESULT WINAPI VarUI4FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut) +HRESULT WINAPI VarUI4FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pulOut, VT_UI4); } @@ -2221,7 +2221,7 @@ HRESULT WINAPI VarI8FromDate(DATE dateIn, LONG64* pi64Out) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarI8FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out) +HRESULT WINAPI VarI8FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pi64Out, VT_I8); } @@ -2549,7 +2549,7 @@ HRESULT WINAPI VarUI8FromDate(DATE dateIn, ULONG64* pui64Out) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarUI8FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out) +HRESULT WINAPI VarUI8FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pui64Out, VT_UI8); } @@ -2824,7 +2824,7 @@ HRESULT WINAPI VarR4FromDate(DATE dateIn, float *pFltOut) * Failure: E_INVALIDARG, if strIn or pFltOut is invalid. * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarR4FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, float *pFltOut) +HRESULT WINAPI VarR4FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, float *pFltOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pFltOut, VT_R4); } @@ -3145,7 +3145,7 @@ HRESULT WINAPI VarR8FromDate(DATE dateIn, double *pDblOut) * Failure: E_INVALIDARG, if strIn or pDblOut is invalid. * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarR8FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, double *pDblOut) +HRESULT WINAPI VarR8FromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, double *pDblOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDblOut, VT_R8); } @@ -3569,7 +3569,7 @@ HRESULT WINAPI VarCyFromDate(DATE dateIn, CY* pCyOut) * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ -HRESULT WINAPI VarCyFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut) +HRESULT WINAPI VarCyFromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pCyOut, VT_CY); } @@ -4267,7 +4267,7 @@ HRESULT WINAPI VarDecFromCy(CY cyIn, DECIMAL* pDecOut) * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ -HRESULT WINAPI VarDecFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut) +HRESULT WINAPI VarDecFromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDecOut, VT_DECIMAL); } @@ -6108,7 +6108,7 @@ static BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, WCHAR *lpszDest) * - If the text is not numeric and does not match any of the above, then * DISP_E_TYPEMISMATCH is returned. */ -HRESULT WINAPI VarBoolFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut) +HRESULT WINAPI VarBoolFromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut) { WCHAR szBuff[64]; LANGID langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); @@ -7595,7 +7595,7 @@ VARIANT_MakeDate_OK: * the date is invalid in that format, in which the most compatible format * that produces a valid date will be used. */ -HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut) +HRESULT WINAPI VarDateFromStr(const OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut) { static const USHORT ParseDateTokens[] = { @@ -7664,14 +7664,15 @@ HRESULT WINAPI VarDateFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, DATE* pd { if ('0' <= *strIn && *strIn <= '9') { + OLECHAR* end; if (dp.dwCount >= 6) { hRet = DISP_E_TYPEMISMATCH; break; } - dp.dwValues[dp.dwCount] = wcstoul(strIn, &strIn, 10); + dp.dwValues[dp.dwCount] = wcstoul(strIn, &end, 10); dp.dwCount++; - strIn--; + strIn = end - 1; } else if (iswalpha(*strIn)) { diff --git a/include/oleauto.h b/include/oleauto.h index f00bfa0c7f8..1d15efd26f3 100644 --- a/include/oleauto.h +++ b/include/oleauto.h @@ -237,7 +237,7 @@ HRESULT WINAPI VarUI1FromI1(signed char,BYTE*); HRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*); HRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*); HRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*); -HRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*); +HRESULT WINAPI VarUI1FromStr(const OLECHAR*,LCID,ULONG,BYTE*); HRESULT WINAPI VarUI1FromCy(CY,BYTE*); HRESULT WINAPI VarUI1FromDec(const DECIMAL*,BYTE*); HRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*); @@ -253,7 +253,7 @@ HRESULT WINAPI VarI2FromI1(signed char,SHORT*); HRESULT WINAPI VarI2FromUI2(USHORT,SHORT*); HRESULT WINAPI VarI2FromUI4(ULONG,SHORT*); HRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*); -HRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*); +HRESULT WINAPI VarI2FromStr(const OLECHAR*,LCID,ULONG,SHORT*); HRESULT WINAPI VarI2FromCy(CY,SHORT*); HRESULT WINAPI VarI2FromDec(const DECIMAL*,SHORT*); HRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*); @@ -269,7 +269,7 @@ HRESULT WINAPI VarI4FromI1(signed char,LONG*); HRESULT WINAPI VarI4FromUI2(USHORT,LONG*); HRESULT WINAPI VarI4FromUI4(ULONG,LONG*); HRESULT WINAPI VarI4FromUI8(ULONG64,LONG*); -HRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*); +HRESULT WINAPI VarI4FromStr(const OLECHAR*,LCID,ULONG,LONG*); HRESULT WINAPI VarI4FromCy(CY,LONG*); HRESULT WINAPI VarI4FromDec(const DECIMAL*,LONG*); HRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*); @@ -280,7 +280,7 @@ HRESULT WINAPI VarI8FromI4(LONG,LONG64*); HRESULT WINAPI VarI8FromR4(FLOAT,LONG64*); HRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*); HRESULT WINAPI VarI8FromDate(DATE,LONG64*); -HRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*); +HRESULT WINAPI VarI8FromStr(const OLECHAR*,LCID,ULONG,LONG64*); HRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*); HRESULT WINAPI VarI8FromI1(signed char,LONG64*); HRESULT WINAPI VarI8FromUI2(USHORT,LONG64*); @@ -302,7 +302,7 @@ HRESULT WINAPI VarR4FromI1(signed char,FLOAT*); HRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*); HRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*); HRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*); -HRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*); +HRESULT WINAPI VarR4FromStr(const OLECHAR*,LCID,ULONG,FLOAT*); HRESULT WINAPI VarR4FromCy(CY,FLOAT*); HRESULT WINAPI VarR4FromDec(const DECIMAL*,FLOAT*); HRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*); @@ -318,7 +318,7 @@ HRESULT WINAPI VarR8FromI1(signed char,double*); HRESULT WINAPI VarR8FromUI2(USHORT,double*); HRESULT WINAPI VarR8FromUI4(ULONG,double*); HRESULT WINAPI VarR8FromUI8(ULONG64,double*); -HRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*); +HRESULT WINAPI VarR8FromStr(const OLECHAR*,LCID,ULONG,double*); HRESULT WINAPI VarR8FromCy(CY,double*); HRESULT WINAPI VarR8FromDec(const DECIMAL*,double*); HRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*); @@ -329,7 +329,7 @@ HRESULT WINAPI VarDateFromI4(LONG,DATE*); HRESULT WINAPI VarDateFromI8(LONG64,DATE*); HRESULT WINAPI VarDateFromR4(FLOAT,DATE*); HRESULT WINAPI VarDateFromR8(DOUBLE,DATE*); -HRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*); +HRESULT WINAPI VarDateFromStr(const OLECHAR*,LCID,ULONG,DATE*); HRESULT WINAPI VarDateFromI1(signed char,DATE*); HRESULT WINAPI VarDateFromUI2(USHORT,DATE*); HRESULT WINAPI VarDateFromUI4(ULONG,DATE*); @@ -346,7 +346,7 @@ HRESULT WINAPI VarCyFromI8(LONG64,CY*); HRESULT WINAPI VarCyFromR4(FLOAT,CY*); HRESULT WINAPI VarCyFromR8(DOUBLE,CY*); HRESULT WINAPI VarCyFromDate(DATE,CY*); -HRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*); +HRESULT WINAPI VarCyFromStr(const OLECHAR*,LCID,ULONG,CY*); HRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*); HRESULT WINAPI VarCyFromI1(signed char,CY*); HRESULT WINAPI VarCyFromUI2(USHORT,CY*); @@ -378,7 +378,7 @@ HRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*); -HRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*); +HRESULT WINAPI VarBoolFromStr(const OLECHAR*,LCID,ULONG,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*); @@ -394,7 +394,7 @@ HRESULT WINAPI VarI1FromI8(LONG64,signed char*); HRESULT WINAPI VarI1FromR4(FLOAT,signed char*); HRESULT WINAPI VarI1FromR8(DOUBLE,signed char*); HRESULT WINAPI VarI1FromDate(DATE,signed char*); -HRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*); +HRESULT WINAPI VarI1FromStr(const OLECHAR*,LCID,ULONG,signed char*); HRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*); HRESULT WINAPI VarI1FromUI2(USHORT,signed char*); HRESULT WINAPI VarI1FromUI4(ULONG,signed char*); @@ -410,7 +410,7 @@ HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*); HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*); HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*); HRESULT WINAPI VarUI2FromDate(DATE,USHORT*); -HRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*); +HRESULT WINAPI VarUI2FromStr(const OLECHAR*,LCID,ULONG,USHORT*); HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*); HRESULT WINAPI VarUI2FromI1(signed char,USHORT*); HRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*); @@ -419,7 +419,7 @@ HRESULT WINAPI VarUI2FromCy(CY,USHORT*); HRESULT WINAPI VarUI2FromDec(const DECIMAL*,USHORT*); HRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);
-HRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*); +HRESULT WINAPI VarUI4FromStr(const OLECHAR*,LCID,ULONG,ULONG*); HRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*); HRESULT WINAPI VarUI4FromI2(SHORT,ULONG*); HRESULT WINAPI VarUI4FromI4(LONG,ULONG*); @@ -442,7 +442,7 @@ HRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*); HRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*); HRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*); HRESULT WINAPI VarUI8FromDate(DATE,ULONG64*); -HRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*); +HRESULT WINAPI VarUI8FromStr(const OLECHAR*,LCID,ULONG,ULONG64*); HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*); HRESULT WINAPI VarUI8FromI1(signed char,ULONG64*); HRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*); @@ -459,7 +459,7 @@ HRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*); HRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*); HRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*); HRESULT WINAPI VarDecFromDate(DATE,DECIMAL*); -HRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*); +HRESULT WINAPI VarDecFromStr(const OLECHAR*,LCID,ULONG,DECIMAL*); HRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*); HRESULT WINAPI VarDecFromI1(signed char,DECIMAL*); HRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*); @@ -647,7 +647,7 @@ typedef struct #define VTBIT_CY (1 << VT_CY) #define VTBIT_DECIMAL (1 << VT_DECIMAL)
-HRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*); +HRESULT WINAPI VarParseNumFromStr(const OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*); HRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);
INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*);