Exemple #1
0
char           *
sfcb_value2Chars(CMPIType type, CMPIValue * value)
{
  char            str[256],
                 *p;
  unsigned int    size;
  CMPIString     *cStr;

  str[0] = 0;
  if (value) {
    if (type & CMPI_ARRAY) {

    } else if (type & CMPI_ENC) {
      if (value->chars) {
        /*
         * non - null encapsulated value 
         */
        switch (type) {
        case CMPI_instance:
          break;

        case CMPI_ref:
          cStr = value->ref->ft->toString(value->ref, NULL);    // __oft_toString(value->ref, 
                                                                // 
          // 
          // NULL);
          return strdup((char *) cStr->hdl);
          break;

        case CMPI_args:
          break;

        case CMPI_filter:
          break;

        case CMPI_chars:
          if (value->chars) {
            size = strlen((char *) value->chars);
            p = malloc(size + 3);
            sprintf(p, "\"%s\"", (char *) value->chars);
            return p;
          }
          break;

        case CMPI_string:
        case CMPI_numericString:
        case CMPI_booleanString:
        case CMPI_dateTimeString:
          if (value->string->hdl) {
            size = strlen((char *) value->string->hdl);
            p = malloc(size + 8);
            sprintf(p, "\"%s\"", (char *) value->string->hdl);
            return p;
          }
          break;

        case CMPI_dateTime:
          cStr = CMGetStringFormat(value->dateTime, NULL);
          size = strlen((char *) cStr->hdl);
          p = malloc(size + 8);
          sprintf(p, "\"%s\"", (char *) cStr->hdl);
          return p;
          break;
        }
      }
    } else if (type & CMPI_SIMPLE) {

      switch (type) {
      case CMPI_boolean:
        return strdup(value->boolean ? "true" : "false");

      case CMPI_char16:
        break;
      }

    } else if (type & CMPI_INTEGER) {

      switch (type) {
      case CMPI_uint8:
        sprintf(str, "%u", value->uint8);
        return strdup(str);
      case CMPI_sint8:
        sprintf(str, "%d", value->sint8);
        return strdup(str);
      case CMPI_uint16:
        sprintf(str, "%u", value->uint16);
        return strdup(str);
      case CMPI_sint16:
        sprintf(str, "%d", value->sint16);
        return strdup(str);
      case CMPI_uint32:
        sprintf(str, "%u", value->uint32);
        return strdup(str);
      case CMPI_sint32:
        sprintf(str, "%d", value->sint32);
        return strdup(str);
      case CMPI_uint64:
        sprintf(str, "%llu", value->uint64);
        return strdup(str);
      case CMPI_sint64:
        sprintf(str, "%lld", value->sint64);
        return strdup(str);
      }

    } else if (type & CMPI_REAL) {

      switch (type) {
      case CMPI_real32:
        sprintf(str, "%g", value->real32);
        return strdup(str);
      case CMPI_real64:
        sprintf(str, "%g", value->real64);
        return strdup(str);
      }

    }
  }
  return strdup(str);
}
void print_scalar(const CMPIData& data)
{
    switch(data.type)
    {
        case CMPI_boolean:
            printf("\"%s\"", data.value.boolean ? "true" : "false");
            break;

        case CMPI_uint8:
            printf("%u", data.value.uint8);
            break;

        case CMPI_sint8:
            printf("%d", data.value.sint8);
            break;

        case CMPI_uint16:
            printf("%u", data.value.uint16);
            break;

        case CMPI_sint16:
            printf("%d", data.value.sint16);
            break;

        case CMPI_uint32:
            printf("%u", data.value.uint32);
            break;

        case CMPI_sint32:
            printf("%d", data.value.sint32);
            break;

        case CMPI_uint64:
            printf("%llu", data.value.uint64);
            break;

        case CMPI_sint64:
            printf("%lld", data.value.sint64);
            break;

        case CMPI_real32:
            printf("%f", data.value.real32);
            break;

        case CMPI_real64:
            printf("%lf", data.value.real64);
            break;

        case CMPI_char16:
            printf("%u", data.value.char16);
            break;

        case CMPI_string:
            printf("%s", CMGetCharPtr(data.value.string));
            break;

        case CMPI_dateTime:
        {
            CMPIString* tmp = CMGetStringFormat(data.value.dateTime, NULL);
            printf("%s", CMGetCharPtr(tmp));
            break;
        }

        case CMPI_ref:
        {
            print(data.value.ref);
            break;
        }

        default:
            assert(0);
            break;
    }
}
/* this is pulled from SFCC; 
   TODO: combine this with SFCC's (and value.c's as well)
 */
char * value2Chars (CMPIType type, CMPIValue *value)
{
  char str[2048], *p;
  CMPIString *cStr;

  str[0]=0;
  if (type & CMPI_ARRAY) {
  }
  else if (type & CMPI_ENC) {

    switch (type) {
    case CMPI_instance:
      break;

    case CMPI_ref:
      if (value->ref) {
	cStr=value->ref->ft->toString(value->ref,NULL);
	p = strdup((char *) cStr->hdl);
	CMRelease(cStr);
      } else {
	p = strdup("NULL");
      }

      return p;

    case CMPI_args:
      break;

    case CMPI_filter:
      break;

    case CMPI_string:
    case CMPI_numericString:
    case CMPI_booleanString:
    case CMPI_dateTimeString:
    case CMPI_classNameString:
      return strdup((value->string && value->string->hdl) ?
		    (char*)value->string->hdl : "NULL");

    case CMPI_dateTime:
      if (value->dateTime) {
	cStr=CMGetStringFormat(value->dateTime,NULL);
	p = strdup((char *) cStr->hdl);
	CMRelease(cStr);
      } else
	p = strdup("NULL");
      return p;
    }

  }
  else if (type & CMPI_SIMPLE) {

    switch (type) {
    case CMPI_boolean:
      return strdup(value->boolean ? "true" : "false");

    case CMPI_char16:
      break;
    }

  }
  else if (type & CMPI_INTEGER) {

    switch (type) {
    case CMPI_uint8:
      sprintf(str, "%u", value->uint8);
      return strdup(str);
    case CMPI_sint8:
      sprintf(str, "%d", value->sint8);
      return strdup(str);
    case CMPI_uint16:
      sprintf(str, "%u", value->uint16);
      return strdup(str);
    case CMPI_sint16:
      sprintf(str, "%d", value->sint16);
      return strdup(str);
    case CMPI_uint32:
      sprintf(str, "%u", value->uint32);
      return strdup(str);
    case CMPI_sint32:
      sprintf(str, "%d", value->sint32);
      return strdup(str);
    case CMPI_uint64:
      sprintf(str, "%llu", value->uint64);
      return strdup(str);
    case CMPI_sint64:
      sprintf(str, "%lld", value->sint64);
      return strdup(str);
    }

  }
  else if (type & CMPI_REAL) {

    switch (type) {
    case CMPI_real32:
      sprintf(str, "%g", value->real32);
      return strdup(str);
    case CMPI_real64:
      sprintf(str, "%g", value->real64);
      return strdup(str);
    }

  }
  return strdup(str);
}
Exemple #4
0
int
value2xml(CMPIData d, UtilStringBuffer * sb, int wv)
{
  char            str[256];
  char           *sp = str;
  int             splen = 0;
  int             freesp = 0;

  if (d.type & CMPI_ARRAY) {
    sb->ft->appendChars(sb, "**[]**");
    return 1;
  }

  else {
    if (wv)
      SFCB_APPENDCHARS_BLOCK(sb, "<VALUE>");
    if ((d.type & (CMPI_UINT | CMPI_SINT)) == CMPI_UINT) {
      unsigned long long ul = 0LL;
      switch (d.type) {
      case CMPI_uint8:
        ul = d.value.uint8;
        break;
      case CMPI_uint16:
        ul = d.value.uint16;
        break;
      case CMPI_uint32:
        ul = d.value.uint32;
        break;
      case CMPI_uint64:
        ul = d.value.uint64;
        break;
      }
      splen = sprintf(str, "%llu", ul);
    }

    else if (d.type & CMPI_SINT) {
      long long       sl = 0LL;
      switch (d.type) {
      case CMPI_sint8:
        sl = d.value.sint8;
        break;
      case CMPI_sint16:
        sl = d.value.sint16;
        break;
      case CMPI_sint32:
        sl = d.value.sint32;
        break;
      case CMPI_sint64:
        sl = d.value.sint64;
        break;
      }
      splen = sprintf(str, "%lld", sl);
    }

    else if (d.type == CMPI_real32) {
      splen = sprintf(str, "%.7e", d.value.real32);
    }

    else if (d.type == CMPI_real64) {
      splen = sprintf(str, "%.16e", d.value.real64);
    }

    else if (d.type == CMPI_boolean)
      splen = sprintf(str, "%s", d.value.boolean ? "TRUE" : "FALSE");
    else if (d.type == CMPI_char16)
      /* To support wide charset/unicode charset, review this line */
      splen = sprintf(str, "%c", (CMPIChar16)d.value.char16);
    else if (d.type == CMPI_chars) {
      sp = XMLEscape(d.value.chars, &splen);
      if (sp)
        freesp = 1;
    } else if (d.type == CMPI_string) {
      sp = XMLEscape((char *) d.value.string->hdl, &splen);
      if (sp)
        freesp = 1;
    } else if (d.type == CMPI_dateTime) {
      if (d.value.dateTime) {
        CMPIString     *sdf = CMGetStringFormat(d.value.dateTime, NULL);
        sp = (char *) sdf->hdl;
        splen = 25;
      } else {
        splen = 0;
      }
    } else if (d.type == CMPI_instance) {
      SFCB_APPENDCHARS_BLOCK(sb, "<![CDATA[");
      instance2xml(d.value.inst, sb, 0);
      SFCB_APPENDCHARS_BLOCK(sb, "]]>");
      splen = 0;
    } else {
      mlogf(M_ERROR, M_SHOW, "%s(%d): invalid value2xml %d-%x\n", __FILE__,
            __LINE__, (int) d.type, (int) d.type);
      abort();
    }
    if (splen) {
      sb->ft->appendBlock(sb, sp, splen);
    }
    if (wv)
      SFCB_APPENDCHARS_BLOCK(sb, "</VALUE>\n");
  }
  if (freesp)
    free(sp);
  return 0;
}
Exemple #5
0
VALUE sfcc_cimdata_to_value(CIMCData data)
{
  CIMCString *cimstr = NULL;
  VALUE rbval;
  CIMCStatus status;

  if (data.type & CMPI_ARRAY) {
    int k = 0;
    int n = 0;
    VALUE rbarray = rb_ary_new();

    if (!data.value.array)
      return rb_ary_new();

    n = data.value.array->ft->getSize(data.value.array, &status);
    if (!status.rc) {
      for (k = 0; k < n; ++k) {
        CIMCData element = data.value.array->ft->getElementAt(data.value.array, k, NULL);
        rb_ary_push(rbarray, sfcc_cimdata_to_value(element));
      }
      return rbarray;
    }
    sfcc_rb_raise_if_error(status, "Can't retrieve array size");
    return Qnil;
  }
  else if (data.type & CMPI_ENC) {
    switch (data.type) {
    case CMPI_instance:
      return data.value.inst ? Sfcc_wrap_cim_instance(data.value.inst->ft->clone(data.value.inst, NULL)) : Qnil;
    case CMPI_class:
      return data.value.cls ? Sfcc_wrap_cim_class(data.value.cls->ft->clone(data.value.cls, NULL)) : Qnil;
    case CMPI_ref:
      return data.value.ref ? Sfcc_wrap_cim_object_path(data.value.ref->ft->clone(data.value.ref, NULL)) : Qnil;
    case CMPI_args:
      return data.value.args ? sfcc_cimargs_to_hash(data.value.args) : Qnil;
    case CMPI_filter:
      return Qnil;
    case CMPI_numericString:
    case CMPI_booleanString:
    case CMPI_dateTimeString:
    case CMPI_classNameString:
      break;
    case CMPI_string:
      return data.value.string ? rb_str_new2((char*)data.value.string->ft->getCharPtr(data.value.string, NULL)) : Qnil;
    case CMPI_charsptr:
      return data.value.chars ? rb_str_new((char*)data.value.dataPtr.ptr, data.value.dataPtr.length) : Qnil;
    case CMPI_dateTime:
      cimstr = data.value.dateTime ? CMGetStringFormat(data.value.dateTime,NULL) : NULL;
      rbval = cimstr ? rb_str_new2(cimstr->ft->getCharPtr(cimstr, NULL)) : Qnil;
      if (cimstr) CMRelease(cimstr);
      return rbval;
    }
  }
  else if (data.type & CMPI_SIMPLE) {
    switch (data.type) {
    case CMPI_boolean: return data.value.boolean ? Qtrue : Qfalse;
    case CMPI_char16: return UINT2NUM(data.value.char16);
    }
  }
  else if (data.type & CMPI_INTEGER) {
    switch (data.type) {
    case CMPI_uint8: return UINT2NUM(data.value.uint8);
    case CMPI_sint8: return INT2NUM(data.value.sint8);
    case CMPI_uint16: return UINT2NUM(data.value.uint16);
    case CMPI_sint16: return INT2NUM(data.value.sint16);
    case CMPI_uint32: return UINT2NUM(data.value.uint32);
    case CMPI_sint32: return INT2NUM(data.value.sint32);
    case CMPI_uint64: return UINT2NUM(data.value.uint64);
    case CMPI_sint64: return INT2NUM(data.value.sint64);
    }
  }
  else if (data.type & CMPI_REAL) {
    switch (data.type) {
    case CMPI_real32: return LONG2NUM(data.value.real32);
    case CMPI_real64: return LONG2NUM(data.value.real64);
    }
  }
  else if (data.type & CMPI_null ) {
    return Qnil;
  }
  rb_raise(rb_eTypeError, "unsupported data data type %d", data.type);
  return Qnil;
}
static int
_testCMPIDateTime()
{
  CMPIStatus      rc = { CMPI_RC_OK, NULL };

  CMPIBoolean     isInterval = 0;
  CMPIBoolean     interval = 0;
  CMPIBoolean     cloneSuccessful = 0;
  CMPIBoolean     binaryDateTimeEqual = 0;

  CMPIDateTime   *dateTime = NULL;
  CMPIDateTime   *new_dateTime = NULL;
  CMPIDateTime   *clonedDateTime = NULL;
  CMPIDateTime   *dateTimeFromBinary = NULL;

  CMPIUint64      dateTimeInBinary = UINT64_LITERAL(1150892800000000);
  CMPIUint64      returnedDateTimeInBinary = 0;

  CMPIString     *stringDate = NULL;
  CMPIString     *clonedStringDate = NULL;

  const char     *normalString = NULL;
  const char     *clonedString = NULL;
  void           *dtptr;

  dateTime = CMNewDateTime(_broker, &rc);
  if (dateTime == NULL) {
    return 1;
  }

  dateTimeFromBinary =
      CMNewDateTimeFromBinary(_broker, dateTimeInBinary, interval, &rc);
  returnedDateTimeInBinary = CMGetBinaryFormat(dateTimeFromBinary, &rc);
  if (dateTimeInBinary == returnedDateTimeInBinary) {
    binaryDateTimeEqual = 1;
  }
  isInterval = CMIsInterval(dateTime, &rc);
  interval = 1;
  new_dateTime =
      CMNewDateTimeFromBinary(_broker, dateTimeInBinary, interval, &rc);
  isInterval = CMIsInterval(new_dateTime, &rc);
  clonedDateTime = dateTime->ft->clone(dateTime, &rc);
  stringDate = CMGetStringFormat(dateTime, &rc);
  clonedStringDate = CMGetStringFormat(clonedDateTime, &rc);
  rc = clonedDateTime->ft->release(clonedDateTime);
  normalString = CMGetCharsPtr(stringDate, &rc);
  clonedString = CMGetCharsPtr(clonedStringDate, &rc);
  if (strcmp(normalString, clonedString) == 0) {
    cloneSuccessful = 1;
  }
  dtptr = dateTime->hdl;
  dateTime->hdl = NULL;

  CMGetBinaryFormat(dateTime, &rc);
  if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE) {
    return 1;
  }

  dateTime->ft->clone(dateTime, &rc);
  if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE) {
    return 1;
  }

  CMGetStringFormat(dateTime, &rc);
  if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE) {
    return 1;
  }

  rc = dateTime->ft->release(dateTime);
  if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE) {
    return 1;
  }

  dateTime->hdl = dtptr;
  rc = dateTime->ft->release(dateTime);
  return 0;
}