From 9cd5e17f9f466f4659f1260bf013e5fc48689de1 Mon Sep 17 00:00:00 2001 From: Martin Fuchs Date: Tue, 2 Mar 2004 10:25:59 +0000 Subject: [PATCH] fix NAMELESSUNION support for struct DECIMAL svn path=/trunk/; revision=8503 --- reactos/lib/oleaut32/Makefile.in | 2 +- reactos/lib/oleaut32/variant.c | 2 +- reactos/w32api/include/oaidl.h | 2 +- reactos/w32api/include/oleauto.h | 10 +++++----- reactos/w32api/include/wtypes.h | 19 ++++++++++++++----- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/reactos/lib/oleaut32/Makefile.in b/reactos/lib/oleaut32/Makefile.in index 6924283821d..35fbc6c4bdf 100644 --- a/reactos/lib/oleaut32/Makefile.in +++ b/reactos/lib/oleaut32/Makefile.in @@ -17,8 +17,8 @@ C_SRCS = \ hash.c \ oleaut.c \ olepicture.c \ - stubs.c \ safearray.c \ + stubs.c \ varformat.c \ variant.c \ vartype.c diff --git a/reactos/lib/oleaut32/variant.c b/reactos/lib/oleaut32/variant.c index fba3b8169e8..2a1832ce4e5 100644 --- a/reactos/lib/oleaut32/variant.c +++ b/reactos/lib/oleaut32/variant.c @@ -2204,7 +2204,7 @@ HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG64 tmp; DECIMAL* pDec = &V_DECIMAL(pVarDst); - DECIMAL_SETZERO(pDec); + DECIMAL_SETZERO(*pDec); DEC_LO32(pDec) = 0; if (pNumprs->dwOutFlags & NUMPRS_NEG) diff --git a/reactos/w32api/include/oaidl.h b/reactos/w32api/include/oaidl.h index be5aa151e4d..538a527ebc4 100644 --- a/reactos/w32api/include/oaidl.h +++ b/reactos/w32api/include/oaidl.h @@ -7,7 +7,7 @@ #ifdef __cplusplus extern "C" { #endif -#ifdef NONAMELESSUNION +#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) #define __VARIANT_NAME_1 n1 #define __VARIANT_NAME_2 n2 #define __VARIANT_NAME_3 n3 diff --git a/reactos/w32api/include/oleauto.h b/reactos/w32api/include/oleauto.h index cdd26daa888..2a69b41d177 100644 --- a/reactos/w32api/include/oleauto.h +++ b/reactos/w32api/include/oleauto.h @@ -22,7 +22,7 @@ #define VAR_FORMAT_NOSUBSTITUTE 0x0020 #define VAR_FOURDIGITYEARS 0x0040 #define VAR_CALENDAR_THAI 0x0080 -#define VAR_CALENDAR_GREGORIAN 0x0100 +#define VAR_CALENDAR_GREGORIAN 0x0100 #define MEMBERID_NIL DISPID_UNKNOWN #define ID_DEFAULTINST (-2) #define DISPATCH_METHOD 1 @@ -34,9 +34,9 @@ #define IsHashValCompatible(h1,h2) ((BOOL)((0x00ff0000&(h1))==(0x00ff0000&(h2)))) #define ACTIVEOBJECT_STRONG 0 #define ACTIVEOBJECT_WEAK 1 -#ifdef NONAMELESSUNION -#define V_UNION(X,Y) ((X)->n1.n2.n3.Y) -#define V_VT(X) ((X)->n1.n2.vt) +#if __STDC__ || defined(NONAMELESSUNION) +#define V_UNION(X,Y) ((X)->__VARIANT_NAME_1.__VARIANT_NAME_2.__VARIANT_NAME_3.Y) +#define V_VT(X) ((X)->__VARIANT_NAME_1.__VARIANT_NAME_2.vt) #else #define V_UNION(X,Y) ((X)->Y) #define V_VT(X) ((X)->vt) @@ -90,7 +90,7 @@ #define V_ARRAYREF(X) V_UNION(X,pparray) #define V_BYREF(X) V_UNION(X,byref) #if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) -#define V_DECIMAL(X) ((X)->n1.decVal) +#define V_DECIMAL(X) ((X)->__VARIANT_NAME_1.decVal) #else #define V_DECIMAL(X) ((X)->decVal) #endif diff --git a/reactos/w32api/include/wtypes.h b/reactos/w32api/include/wtypes.h index ca0c2be49a0..326964273eb 100644 --- a/reactos/w32api/include/wtypes.h +++ b/reactos/w32api/include/wtypes.h @@ -11,19 +11,28 @@ extern "C" { #endif -#define DEC_SIGN(d) ((d)->u.s.sign) -#define DEC_SCALE(d) ((d)->u.s.scale) -#define DEC_SIGNSCALE(d) ((d)->u.signscale) -#define DEC_HI32(d) ((d)->Hi32) +#ifdef NONAMELESSUNION +#define DEC_SIGN(d) ((d)->DUMMYUNIONNAME.DUMMYSTRUCTNAME.sign) +#define DEC_SCALE(d) ((d)->DUMMYUNIONNAME.DUMMYSTRUCTNAME.scale) +#define DEC_SIGNSCALE(d) ((d)->DUMMYUNIONNAME.signscale) #define DEC_MID32(d) ((d)->DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.Mid32) #define DEC_LO32(d) ((d)->DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.Lo32) #define DEC_LO64(d) ((d)->DUMMYUNIONNAME2.Lo64) +#else +#define DEC_SIGN(d) ((d)->sign) +#define DEC_SCALE(d) ((d)->scale) +#define DEC_SIGNSCALE(d) ((d)->signscale) +#define DEC_MID32(d) ((d)->Mid32) +#define DEC_LO32(d) ((d)->Lo32) +#define DEC_LO64(d) ((d)->Lo64) +#endif +#define DEC_HI32(d) ((d)->Hi32) #define IID_NULL GUID_NULL #define CLSID_NULL GUID_NULL #define CBPCLIPDATA(d) ((d).cbSize-sizeof((d).ulClipFmt)) #define DECIMAL_NEG ((BYTE)0x80) -#define DECIMAL_SETZERO(d) {DEC_LO64(d)=DEC_HI32(d)=DEC_SIGNSCALE(d)=0;} +#define DECIMAL_SETZERO(d) {DEC_LO64(&d)=DEC_HI32(&d)=DEC_SIGNSCALE(&d)=0;} #define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x01 #define ROTFLAGS_ALLOWANYCLIENT 0x02