コード例 #1
0
ファイル: queryOperation.c プロジェクト: zaneb/sblim-sfcb
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;
}
コード例 #2
0
ファイル: value.c プロジェクト: mchasal/SFCB
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;
}