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:
coop%netscape.com 1999-01-18 22:04:49 +00:00
parent 7112370451
commit df9664e830
4 changed files with 162 additions and 160 deletions

View File

@ -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 {

View File

@ -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);
}

View File

@ -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 {

View File

@ -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);
}