Пример #1
0
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);
}
Пример #2
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;
}