static int instCompare(QLOperand* self, QLOperand* op, QLPropertySource* src) { CMPIInstance *ov=NULL; char *sov; QLOpd type=op->type; sov=(char*)instGetClassName(self->inst); if (type==QL_PropertyName) { ov=getPropValue(op, src, &type).inst; } if (type==QL_Name) { if (strcasecmp(sov,op->charsVal)==0) return 0; return isChild(src->sns,op->charsVal,sov)==0; } if (type==QL_Inst) { return instanceCompare(self->inst, ov); } return -2; }
int sfcb_comp_CMPIValue(CMPIValue * val1, CMPIValue * val2, CMPIType type) { int c; CMPIValue tempVal1, tempVal2; CMPIString *s1, *s2; /* * check if we have null pointers for our ENC data types, the pointers */ if (val1->array == NULL && val2->array == NULL) return 0; /* identical */ if (val1->array == NULL) return -1; /* val1 is less than val2 */ if (val2->array == NULL) return 1; /* val2 is less than val1 */ if (type & CMPI_ARRAY) { c = (val1->array)->ft->getSize(val1->array, NULL); if (c != (val2->array)->ft->getSize(val2->array, NULL)) { /* * member count not equal -> CMPIValue cannot be equal */ return 1; } while (c--) { tempVal1 = ((val1->array)->ft->getElementAt(val1->array, c - 1, NULL)). value; tempVal2 = ((val2->array)->ft->getElementAt(val2->array, c - 1, NULL)). value; if (sfcb_comp_CMPIValue(&tempVal1, &tempVal2, type & ~CMPI_ARRAY)) { /* * one element does not seem to be identical */ return 1; } } /* * all tests passed - arrays identical */ return 0; } if (val1 && val2) { switch (type) { case CMPI_boolean: case CMPI_uint8: case CMPI_sint8: return (val1->Byte - val2->Byte); case CMPI_char16: case CMPI_uint16: case CMPI_sint16: return (val1->Short - val2->Short); case CMPI_uint32: case CMPI_sint32: return (val1->Int - val2->Int); case CMPI_real32: return (val1->Float - val2->Float); case CMPI_uint64: case CMPI_sint64: return (val1->Long - val2->Long); case CMPI_real64: return (val1->Double - val2->Double); case CMPI_instance: return (instanceCompare(val1->inst, val2->inst)); case CMPI_ref: return (objectpathCompare(val1->ref, val2->ref)); case CMPI_string: return extended_strcmp(val1->string->ft-> getCharPtr(val1->string, NULL), val2->string->ft->getCharPtr(val2->string, NULL)); case CMPI_dateTime: s1 = val1->dateTime->ft->getStringFormat(val1->dateTime, NULL); s2 = val2->dateTime->ft->getStringFormat(val2->dateTime, NULL); return extended_strcmp(s1->ft->getCharPtr(s1, NULL), s2->ft->getCharPtr(s2, NULL)); default: return 0; } } return 0; }