NOT YET PART OF SEAMONKEY:
* added #defines for is_pointer/tag combos used in TypeDescriptors to match table in typelib spec. * now handle error case in xpt_struct.c using macro * still must do offset management git-svn-id: svn://10.0.0.236/trunk@17966 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
7112370451
commit
df9664e830
@ -133,8 +133,6 @@ struct XPTString {
|
||||
* designates an InterfaceTypeDescriptor, while 19 represents an
|
||||
* InterfaceIsTypeDescriptor.
|
||||
*/
|
||||
#define TD_INTERFACE_TYPE 18
|
||||
#define TD_INTERFACE_IS_TYPE 19
|
||||
|
||||
struct XPTTypeDescriptorPrefix {
|
||||
uint8 is_pointer:1, is_unique_pointer:1, is_reference:1,
|
||||
@ -142,6 +140,64 @@ struct XPTTypeDescriptorPrefix {
|
||||
};
|
||||
#define XPT_TDP_SIZE 1
|
||||
|
||||
/*
|
||||
* The following defines map mnemonic names to the different numeric values
|
||||
* of XPTTypeDescriptor->tag when XPTTypeDescriptor->is_pointer is FALSE.
|
||||
*/
|
||||
#define TD_INT8 0 /* int8 */
|
||||
#define TD_INT16 1 /* int16 */
|
||||
#define TD_INT32 2 /* int32 */
|
||||
#define TD_INT64 3 /* int64 */
|
||||
#define TD_UINT8 4 /* uint8 */
|
||||
#define TD_UINT16 5 /* uint16 */
|
||||
#define TD_UINT32 6 /* uint32 */
|
||||
#define TD_UINT64 7 /* uint64 */
|
||||
#define TD_FLOAT 8 /* float */
|
||||
#define TD_DOUBLE 9 /* double */
|
||||
#define TD_BOOL 10 /* boolean (8-bit value) */
|
||||
#define TD_CHAR 11 /* char (8-bit character) */
|
||||
#define TD_WCHAR 12 /* wchar_t (16-bit character) */
|
||||
#define TD_VOID 13 /* void */
|
||||
|
||||
/* These ones aren't used yet, but for completeness sake they're here.
|
||||
* #define TD_RESERVED 14
|
||||
* #define TD_RESERVED 15
|
||||
* #define TD_RESERVED 16
|
||||
* #define TD_RESERVED 17
|
||||
*/
|
||||
|
||||
/*
|
||||
* The following defines represent special cases XPTTypeDescriptor->tag
|
||||
* when the TypeDescriptor is of type Interface or InterfaceIs.
|
||||
*/
|
||||
#define TD_INTERFACE_TYPE 18
|
||||
#define TD_INTERFACE_IS_TYPE 19
|
||||
|
||||
/*
|
||||
* The following defines map mnemonic names to the different numeric values
|
||||
* of XPTTypeDescriptor->tag when XPTTypeDescriptor->is_pointer is TRUE.
|
||||
*/
|
||||
#define TD_PINT8 0 /* int8* */
|
||||
#define TD_PINT16 1 /* int16* */
|
||||
#define TD_PINT32 2 /* int32* */
|
||||
#define TD_PINT64 3 /* int64* */
|
||||
#define TD_PUINT8 4 /* uint8* */
|
||||
#define TD_PUINT16 5 /* uint16* */
|
||||
#define TD_PUINT32 6 /* uint32* */
|
||||
#define TD_PUINT64 7 /* uint64* */
|
||||
#define TD_PFLOAT 8 /* float* */
|
||||
#define TD_PDOUBLE 9 /* double* */
|
||||
#define TD_PBOOL 10 /* boolean* (8-bit value) */
|
||||
#define TD_PCHAR 11 /* char* (pointer to a single 8-bit character) */
|
||||
#define TD_PWCHAR 12 /* wchar_t* (pointer to a single 16-bit character) */
|
||||
#define TD_PVOID 13 /* void* (generic opaque pointer) */
|
||||
#define TD_PPNSIID 14 /* nsIID** */
|
||||
#define TD_PBSTR 15 /* BSTR is an OLE type consisting of a 32-bit
|
||||
string-length field followed bu a NUL-terminated
|
||||
Unicode string */
|
||||
#define TD_PSTRING 16 /* char* (pointer to a NUL-terminated array) */
|
||||
#define TD_PWSTRING 17 /* wchar* (pointer to a NUL-terminated array) */
|
||||
|
||||
struct XPTTypeDescriptor {
|
||||
XPTTypeDescriptorPrefix *prefix;
|
||||
union {
|
||||
|
||||
@ -72,13 +72,8 @@ XPT_DoHeader(XPTCursor *cursor, XPTHeader **headerp)
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(header);
|
||||
*headerp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
|
||||
XPT_ERROR_HANDLE(header);
|
||||
}
|
||||
|
||||
/* InterfaceDirectoryEntry records go in the header */
|
||||
@ -146,12 +141,7 @@ XPT_DoInterfaceDirectoryEntry(XPTCursor *cursor,
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(ide);
|
||||
*idep = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(ide);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -192,12 +182,7 @@ XPT_DoInterfaceDescriptor(XPTCursor *cursor, XPTInterfaceDescriptor **idp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(id);
|
||||
*idp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(id);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -218,37 +203,37 @@ XPT_DoConstDescriptor(XPTCursor *cursor, XPTConstDescriptor **cdp)
|
||||
}
|
||||
|
||||
switch(cd->type.prefix->tag) {
|
||||
case '0':
|
||||
case TD_INT8:
|
||||
XPT_Do8(cursor, &cd->value.i8);
|
||||
break;
|
||||
case 1:
|
||||
case TD_INT16:
|
||||
XPT_Do16(cursor, &cd->value.i16);
|
||||
break;
|
||||
case 2:
|
||||
case TD_INT32:
|
||||
XPT_Do32(cursor, &cd->value.i32);
|
||||
break;
|
||||
case 3:
|
||||
case TD_INT64:
|
||||
XPT_Do64(cursor, &cd->value.i64);
|
||||
break;
|
||||
case 4:
|
||||
case TD_UINT8:
|
||||
XPT_Do8(cursor, &cd->value.ui8);
|
||||
break;
|
||||
case 5:
|
||||
case TD_UINT16:
|
||||
XPT_Do16(cursor, &cd->value.ui16);
|
||||
break;
|
||||
case 6:
|
||||
case TD_UINT32:
|
||||
XPT_Do32(cursor, &cd->value.ui32);
|
||||
break;
|
||||
case 7:
|
||||
case TD_UINT64:
|
||||
XPT_Do64(cursor, &cd->value.ui64);
|
||||
break;
|
||||
case 11:
|
||||
case TD_CHAR:
|
||||
XPT_Do8(cursor, &cd->value.ch);
|
||||
break;
|
||||
case 12:
|
||||
case TD_WCHAR:
|
||||
XPT_Do16(cursor, &cd->value.wch);
|
||||
break;
|
||||
case 15:
|
||||
case TD_PBSTR:
|
||||
if (cd->type.prefix->is_pointer == 1) {
|
||||
XPT_DoString(cursor, &cd->value.string);
|
||||
break;
|
||||
@ -260,12 +245,7 @@ XPT_DoConstDescriptor(XPTCursor *cursor, XPTConstDescriptor **cdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(cd);
|
||||
*cdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(cd);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -296,12 +276,7 @@ XPT_DoMethodDescriptor(XPTCursor *cursor, XPTMethodDescriptor **mdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(md);
|
||||
*mdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(md);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -327,12 +302,7 @@ XPT_DoParamDescriptor(XPTCursor *cursor, XPTParamDescriptor **pdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(pd);
|
||||
*pdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(pd);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -357,12 +327,7 @@ XPT_DoTypeDescriptorPrefix(XPTCursor *cursor, XPTTypeDescriptorPrefix **tdpp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(tdp);
|
||||
*tdpp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(tdp);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -392,12 +357,7 @@ XPT_DoTypeDescriptor(XPTCursor *cursor, XPTTypeDescriptor **tdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(td);
|
||||
*tdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(td);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -420,12 +380,7 @@ XPT_DoAnnotationPrefix(XPTCursor *cursor, XPTAnnotationPrefix **app)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(ap);
|
||||
*app = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(ap);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -447,12 +402,7 @@ XPT_DoPrivateAnnotation(XPTCursor *cursor, XPTPrivateAnnotation **pap)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(pa);
|
||||
*pap = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(pa);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -478,12 +428,7 @@ XPT_DoAnnotation(XPTCursor *cursor, XPTAnnotation **ap)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(a);
|
||||
*ap = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -133,8 +133,6 @@ struct XPTString {
|
||||
* designates an InterfaceTypeDescriptor, while 19 represents an
|
||||
* InterfaceIsTypeDescriptor.
|
||||
*/
|
||||
#define TD_INTERFACE_TYPE 18
|
||||
#define TD_INTERFACE_IS_TYPE 19
|
||||
|
||||
struct XPTTypeDescriptorPrefix {
|
||||
uint8 is_pointer:1, is_unique_pointer:1, is_reference:1,
|
||||
@ -142,6 +140,64 @@ struct XPTTypeDescriptorPrefix {
|
||||
};
|
||||
#define XPT_TDP_SIZE 1
|
||||
|
||||
/*
|
||||
* The following defines map mnemonic names to the different numeric values
|
||||
* of XPTTypeDescriptor->tag when XPTTypeDescriptor->is_pointer is FALSE.
|
||||
*/
|
||||
#define TD_INT8 0 /* int8 */
|
||||
#define TD_INT16 1 /* int16 */
|
||||
#define TD_INT32 2 /* int32 */
|
||||
#define TD_INT64 3 /* int64 */
|
||||
#define TD_UINT8 4 /* uint8 */
|
||||
#define TD_UINT16 5 /* uint16 */
|
||||
#define TD_UINT32 6 /* uint32 */
|
||||
#define TD_UINT64 7 /* uint64 */
|
||||
#define TD_FLOAT 8 /* float */
|
||||
#define TD_DOUBLE 9 /* double */
|
||||
#define TD_BOOL 10 /* boolean (8-bit value) */
|
||||
#define TD_CHAR 11 /* char (8-bit character) */
|
||||
#define TD_WCHAR 12 /* wchar_t (16-bit character) */
|
||||
#define TD_VOID 13 /* void */
|
||||
|
||||
/* These ones aren't used yet, but for completeness sake they're here.
|
||||
* #define TD_RESERVED 14
|
||||
* #define TD_RESERVED 15
|
||||
* #define TD_RESERVED 16
|
||||
* #define TD_RESERVED 17
|
||||
*/
|
||||
|
||||
/*
|
||||
* The following defines represent special cases XPTTypeDescriptor->tag
|
||||
* when the TypeDescriptor is of type Interface or InterfaceIs.
|
||||
*/
|
||||
#define TD_INTERFACE_TYPE 18
|
||||
#define TD_INTERFACE_IS_TYPE 19
|
||||
|
||||
/*
|
||||
* The following defines map mnemonic names to the different numeric values
|
||||
* of XPTTypeDescriptor->tag when XPTTypeDescriptor->is_pointer is TRUE.
|
||||
*/
|
||||
#define TD_PINT8 0 /* int8* */
|
||||
#define TD_PINT16 1 /* int16* */
|
||||
#define TD_PINT32 2 /* int32* */
|
||||
#define TD_PINT64 3 /* int64* */
|
||||
#define TD_PUINT8 4 /* uint8* */
|
||||
#define TD_PUINT16 5 /* uint16* */
|
||||
#define TD_PUINT32 6 /* uint32* */
|
||||
#define TD_PUINT64 7 /* uint64* */
|
||||
#define TD_PFLOAT 8 /* float* */
|
||||
#define TD_PDOUBLE 9 /* double* */
|
||||
#define TD_PBOOL 10 /* boolean* (8-bit value) */
|
||||
#define TD_PCHAR 11 /* char* (pointer to a single 8-bit character) */
|
||||
#define TD_PWCHAR 12 /* wchar_t* (pointer to a single 16-bit character) */
|
||||
#define TD_PVOID 13 /* void* (generic opaque pointer) */
|
||||
#define TD_PPNSIID 14 /* nsIID** */
|
||||
#define TD_PBSTR 15 /* BSTR is an OLE type consisting of a 32-bit
|
||||
string-length field followed bu a NUL-terminated
|
||||
Unicode string */
|
||||
#define TD_PSTRING 16 /* char* (pointer to a NUL-terminated array) */
|
||||
#define TD_PWSTRING 17 /* wchar* (pointer to a NUL-terminated array) */
|
||||
|
||||
struct XPTTypeDescriptor {
|
||||
XPTTypeDescriptorPrefix *prefix;
|
||||
union {
|
||||
|
||||
@ -72,13 +72,8 @@ XPT_DoHeader(XPTCursor *cursor, XPTHeader **headerp)
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(header);
|
||||
*headerp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
|
||||
XPT_ERROR_HANDLE(header);
|
||||
}
|
||||
|
||||
/* InterfaceDirectoryEntry records go in the header */
|
||||
@ -146,12 +141,7 @@ XPT_DoInterfaceDirectoryEntry(XPTCursor *cursor,
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(ide);
|
||||
*idep = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(ide);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -192,12 +182,7 @@ XPT_DoInterfaceDescriptor(XPTCursor *cursor, XPTInterfaceDescriptor **idp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(id);
|
||||
*idp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(id);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -218,37 +203,37 @@ XPT_DoConstDescriptor(XPTCursor *cursor, XPTConstDescriptor **cdp)
|
||||
}
|
||||
|
||||
switch(cd->type.prefix->tag) {
|
||||
case '0':
|
||||
case TD_INT8:
|
||||
XPT_Do8(cursor, &cd->value.i8);
|
||||
break;
|
||||
case 1:
|
||||
case TD_INT16:
|
||||
XPT_Do16(cursor, &cd->value.i16);
|
||||
break;
|
||||
case 2:
|
||||
case TD_INT32:
|
||||
XPT_Do32(cursor, &cd->value.i32);
|
||||
break;
|
||||
case 3:
|
||||
case TD_INT64:
|
||||
XPT_Do64(cursor, &cd->value.i64);
|
||||
break;
|
||||
case 4:
|
||||
case TD_UINT8:
|
||||
XPT_Do8(cursor, &cd->value.ui8);
|
||||
break;
|
||||
case 5:
|
||||
case TD_UINT16:
|
||||
XPT_Do16(cursor, &cd->value.ui16);
|
||||
break;
|
||||
case 6:
|
||||
case TD_UINT32:
|
||||
XPT_Do32(cursor, &cd->value.ui32);
|
||||
break;
|
||||
case 7:
|
||||
case TD_UINT64:
|
||||
XPT_Do64(cursor, &cd->value.ui64);
|
||||
break;
|
||||
case 11:
|
||||
case TD_CHAR:
|
||||
XPT_Do8(cursor, &cd->value.ch);
|
||||
break;
|
||||
case 12:
|
||||
case TD_WCHAR:
|
||||
XPT_Do16(cursor, &cd->value.wch);
|
||||
break;
|
||||
case 15:
|
||||
case TD_PBSTR:
|
||||
if (cd->type.prefix->is_pointer == 1) {
|
||||
XPT_DoString(cursor, &cd->value.string);
|
||||
break;
|
||||
@ -260,12 +245,7 @@ XPT_DoConstDescriptor(XPTCursor *cursor, XPTConstDescriptor **cdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(cd);
|
||||
*cdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(cd);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -296,12 +276,7 @@ XPT_DoMethodDescriptor(XPTCursor *cursor, XPTMethodDescriptor **mdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(md);
|
||||
*mdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(md);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -327,12 +302,7 @@ XPT_DoParamDescriptor(XPTCursor *cursor, XPTParamDescriptor **pdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(pd);
|
||||
*pdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(pd);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -357,12 +327,7 @@ XPT_DoTypeDescriptorPrefix(XPTCursor *cursor, XPTTypeDescriptorPrefix **tdpp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(tdp);
|
||||
*tdpp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(tdp);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -392,12 +357,7 @@ XPT_DoTypeDescriptor(XPTCursor *cursor, XPTTypeDescriptor **tdp)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(td);
|
||||
*tdp = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(td);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -420,12 +380,7 @@ XPT_DoAnnotationPrefix(XPTCursor *cursor, XPTAnnotationPrefix **app)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(ap);
|
||||
*app = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(ap);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -447,12 +402,7 @@ XPT_DoPrivateAnnotation(XPTCursor *cursor, XPTPrivateAnnotation **pap)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(pa);
|
||||
*pap = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(pa);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@ -478,12 +428,7 @@ XPT_DoAnnotation(XPTCursor *cursor, XPTAnnotation **ap)
|
||||
|
||||
return PR_TRUE;
|
||||
|
||||
error:
|
||||
if (mode == XPT_DECODE) {
|
||||
PR_FREE(a);
|
||||
*ap = 0;
|
||||
}
|
||||
return PR_FALSE;
|
||||
XPT_ERROR_HANDLE(a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user