in LCM/codec/mof/parser/types.c [2881:3016]
MI_Boolean Identical(
void * mofstate,
const void* v1, const void* v2, MI_Type type)
{
MOF_State * state = (MOF_State *)mofstate;
if (v1 == NULL && v2 == NULL)
return 1;
if (v1 == NULL && v2 != NULL)
return 0;
if (v1 != NULL && v2 == NULL)
return 0;
switch (type)
{
case MI_BOOLEAN:
return *((MI_Boolean*)v1) == *((MI_Boolean*)v2);
case MI_UINT8:
return *((MI_Uint8*)v1) == *((MI_Uint8*)v2);
case MI_SINT8:
return *((MI_Sint8*)v1) == *((MI_Sint8*)v2);
case MI_UINT16:
return *((MI_Uint16*)v1) == *((MI_Uint16*)v2);
case MI_SINT16:
return *((MI_Sint16*)v1) == *((MI_Sint16*)v2);
case MI_UINT32:
return *((MI_Uint32*)v1) == *((MI_Uint32*)v2);
case MI_SINT32:
return *((MI_Sint32*)v1) == *((MI_Sint32*)v2);
case MI_UINT64:
return *((MI_Uint64*)v1) == *((MI_Uint64*)v2);
case MI_SINT64:
return *((MI_Sint64*)v1) == *((MI_Sint64*)v2);
case MI_REAL32:
return *((MI_Real32*)v1) == *((MI_Real32*)v2);
case MI_REAL64:
return *((MI_Real64*)v1) == *((MI_Real64*)v2);
case MI_CHAR16:
return *((MI_Char16*)v1) == *((MI_Char16*)v2);
case MI_DATETIME:
return memcmp((MI_Datetime*)v1, (MI_Datetime*)v2,
sizeof(MI_Datetime)) == 0;
case MI_STRING:
return Tcscmp(*(MI_Char**)v1, *(MI_Char**)v2) == 0;
case MI_BOOLEANA:
case MI_UINT8A:
case MI_SINT8A:
case MI_UINT16A:
case MI_SINT16A:
case MI_UINT32A:
case MI_SINT32A:
case MI_UINT64A:
case MI_SINT64A:
case MI_CHAR16A:
case MI_DATETIMEA:
{
MI_BooleanA* a1 = (MI_BooleanA*)v1;
MI_BooleanA* a2 = (MI_BooleanA*)v2;
#ifdef _PREFAST_
#pragma prefast (push)
#pragma prefast (disable: 26014)
#endif
MI_Uint32 elementSize = (MI_Uint32)_typeSizes[type & ~MI_ARRAY_BIT];
#ifdef _PREFAST_
#pragma prefast (pop)
#endif
if (a1->size != a2->size)
return 0;
if (memcmp(a1->data, a2->data, a1->size * elementSize) != 0)
return 0;
return 1;
}
case MI_REAL32A:
{
MI_Real32A* a1 = (MI_Real32A*)v1;
MI_Real32A* a2 = (MI_Real32A*)v2;
MI_Uint32 i;
if (a1->size != a2->size)
return 0;
for (i = 0; i < a1->size; i++)
{
if (a1->data[i] != a2->data[i])
return 0;
}
return 1;
}
case MI_REAL64A:
{
MI_Real64A* a1 = (MI_Real64A*)v1;
MI_Real64A* a2 = (MI_Real64A*)v2;
MI_Uint32 i;
if (a1->size != a2->size)
return 0;
for (i = 0; i < a1->size; i++)
{
if (a1->data[i] != a2->data[i])
return 0;
}
return 1;
}
case MI_STRINGA:
{
MI_StringA* a1 = (MI_StringA*)v1;
MI_StringA* a2 = (MI_StringA*)v2;
MI_Uint32 i;
if (a1->size != a2->size)
return 0;
for (i = 0; i < a1->size; i++)
{
if (Tcscmp(a1->data[i], a2->data[i]) != 0)
return 0;
}
return 1;
}
default:
{
yyerrorf(state->errhandler, ID_INTERNAL_ERROR, "internal error: %s(%u)",
__FILE__, __LINE__);
return 0;
}
}
}