int instance2xml(CMPIInstance *ci, UtilStringBuffer * sb, unsigned int flags) { ClInstance *inst = (ClInstance *) ci->hdl; int i, m = ClInstanceGetPropertyCount(inst); char *type; UtilStringBuffer *qsb = UtilFactory->newStrinBuffer(1024); _SFCB_ENTER(TRACE_CIMXMLPROC, "instance2xml"); SFCB_APPENDCHARS_BLOCK(sb, "<INSTANCE CLASSNAME=\""); sb->ft->appendChars(sb, instGetClassName(ci)); SFCB_APPENDCHARS_BLOCK(sb, "\">\n"); if (flags & FL_includeQualifiers) quals2xml(inst->quals, sb); for (i = 0; i < m; i++) { CMPIString name; CMPIData data; qsb->ft->reset(qsb); if (ClInstanceIsPropertyAtFiltered(inst, i)) { continue; } data = __ift_internal_getPropertyAt(ci, i, (char **) &name.hdl, NULL, 1); if (data.type & CMPI_ARRAY) { DATA2XML(&data, ci, &name, NULL, "<PROPERTY.ARRAY NAME=\"", "</PROPERTY.ARRAY>\n", sb, qsb, 1, 0); } else { type = dataType(data.type); if (*type == '*') DATA2XML(&data, ci, &name, NULL, "<PROPERTY.REFERENCE NAME=\"", "</PROPERTY.REFERENCE>\n", sb, qsb, 1, 0); else DATA2XML(&data, ci, &name, NULL, "<PROPERTY NAME=\"", "</PROPERTY>\n", sb, qsb, 1, 0); } if (data.type & (CMPI_ENC | CMPI_ARRAY)) { // don't get confused // using generic release if ((data.state & ~CMPI_keyValue) == 0 && data.type != CMPI_instance) data.value.inst->ft->release(data.value.inst); } } SFCB_APPENDCHARS_BLOCK(sb, "</INSTANCE>\n"); qsb->ft->release(qsb); _SFCB_RETURN(0); }
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; }