コード例 #1
0
ファイル: constClass.c プロジェクト: mchasal/SFCB
CMPIData
internalGetPropQualAt(CMPIConstClass * cc, CMPICount p, CMPICount i,
                      CMPIString **name, CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  char           *n;
  CMPIData        rv = { 0, CMPI_notFound, {0} };

  if (ClClassGetPropQualifierAt(cls, p, i, &rv, name ? &n : NULL)) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
    if (name)
      *name = sfcb_native_new_CMPIString(NULL, NULL, 0);
    return rv;
  }
  if (rv.type == CMPI_chars) {
    rv.value.string = sfcb_native_new_CMPIString(ClObjectGetClString
                                                 (&cls->hdr,
                                                  (ClString *) & rv.value.
                                                  chars), NULL, 0);
    rv.type = CMPI_string;
  }
  if (rv.type & CMPI_ARRAY && rv.value.dataPtr.ptr) {
    rv.value.array =
        native_make_CMPIArray((CMPIData *) rv.value.dataPtr.ptr, NULL,
                              &cls->hdr);
  }
  if (name) {
    *name = sfcb_native_new_CMPIString(n, NULL, 0);
  }
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return rv;
}
コード例 #2
0
ファイル: qualifier.c プロジェクト: buccella/SFCB
static CMPIData
getQualifierDeclData(CMPIQualifierDecl * cq, CMPIStatus *rc)
{
  ClQualifierDeclaration *q = (ClQualifierDeclaration *) cq->hdl;

  CMPIData        rv = { 0, CMPI_notFound, {0} };
  if (ClQualifierDeclarationGetQualifierData(q, &rv)) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
    return rv;
  }
  if (rv.type == CMPI_chars) {
    rv.value.string = sfcb_native_new_CMPIString(ClObjectGetClString
                                                 (&q->hdr,
                                                  (ClString *) & rv.value.
                                                  chars), NULL, 0);
    rv.type = CMPI_string;
  }
  if (rv.type & CMPI_ARRAY && rv.value.array) {
    rv.value.array = native_make_CMPIArray((CMPIData *) rv.value.array,
                                           NULL, &q->hdr);
  }

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return rv;
}
コード例 #3
0
ファイル: args.c プロジェクト: mchasal/SFCB
static CMPIData
__aft_getArgAt(const CMPIArgs * args,
               unsigned int i, CMPIString **name, CMPIStatus *rc)
{
  ClArgs         *ca = (ClArgs *) args->hdl;
  char           *n;
  CMPIData        rv = { 0, CMPI_notFound, {0} };

  if (ClArgsGetArgAt(ca, i, &rv, name ? &n : NULL)) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
    return rv;
  }
  if (rv.type == CMPI_chars) {
    rv.value.string = sfcb_native_new_CMPIString(rv.value.chars, NULL, 0);
    rv.type = CMPI_string;
  } else if (rv.type == CMPI_ref) {
    rv.value.ref = getObjectPath((char *)
                                 ClObjectGetClString(&ca->hdr,
                                                     (ClString *) &
                                                     rv.value.chars),
                                 NULL);
  } else if (rv.type & CMPI_ARRAY && rv.value.array) {
    rv.value.array =
        internal_native_make_CMPIArray((CMPIData *) rv.value.array, NULL,
                                       &ca->hdr, MEM_TRACKED);
  }
  if (name) {
    *name = sfcb_native_new_CMPIString(n, NULL, 0);
  }
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return rv;
}
コード例 #4
0
ファイル: constClass.c プロジェクト: mchasal/SFCB
static const char *
getCharSuperClassName(const CMPIConstClass * cc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  if (cls->parent.id)
    return ClObjectGetClString(&cls->hdr, &cls->parent);
  return NULL;
}
コード例 #5
0
ファイル: qualifier.c プロジェクト: buccella/SFCB
static const char *
getCharQualifierName(CMPIQualifierDecl * cq)
{
  ClQualifierDeclaration *q = (ClQualifierDeclaration *) cq->hdl;
  if (q->qualifierName.id)
    return ClObjectGetClString(&q->hdr, &q->qualifierName);
  return NULL;
}
コード例 #6
0
ファイル: constClass.c プロジェクト: mchasal/SFCB
CMPIData
getPropertyQualsAt(CMPIConstClass * cc, CMPICount i, CMPIString **name,
                   unsigned long *quals, CMPIString **refName,
                   CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  char           *n;
  char           *rName = NULL;
  CMPIData        rv = { 0, CMPI_notFound, {0} };
  if (ClClassGetPropertyAt(cls, i, &rv, name ? &n : NULL, quals, &rName)) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
    return rv;
  }
  if (rv.type == CMPI_chars) {
    rv.value.string = sfcb_native_new_CMPIString(rv.value.chars, NULL, 0);
    rv.type = CMPI_string;
  } else if (rv.type == CMPI_ref) {
    if ((rv.state & CMPI_nullValue) == 0)
      rv.value.ref = getObjectPath((char *)
                                   ClObjectGetClString(&cls->hdr,
                                                       (ClString *) &
                                                       rv.value.chars),
                                   NULL);
  }
  if (rv.type & CMPI_ARRAY && rv.value.array) {
    rv.value.array =
        native_make_CMPIArray((CMPIData *) rv.value.array, NULL,
                              &cls->hdr);
  }
  if (name) {
    *name = sfcb_native_new_CMPIString(n, NULL, 0);
  }
  if (refName && rName) {
    *refName = sfcb_native_new_CMPIString(rName, NULL, 0);
  } else {
    if (refName) {
      *refName = NULL;
    }
  }
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return rv;
}
コード例 #7
0
ファイル: constClass.c プロジェクト: mchasal/SFCB
static CMPIData
getQualifier(CMPIConstClass * cc, const char *name, CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  CMPIData        rv_notfound = { 0, CMPI_notFound, {0} };
  CMPIData        rv;
  char           *qname;
  int             i;
  CMPICount       cnt = ClClassGetQualifierCount(cls);

  for (i = 0; i < cnt; i++) {
    if (ClClassGetQualifierAt(cls, i, &rv, &qname)) {
      if (rc)
        CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
      return rv_notfound;
    }
    if (strcasecmp(name, qname) == 0) {
      if (rv.type == CMPI_chars) {
        rv.value.string = sfcb_native_new_CMPIString(ClObjectGetClString
                                                     (&cls->hdr,
                                                      (ClString *) &
                                                      rv.value.chars),
                                                     NULL, 0);
        rv.type = CMPI_string;
      }
      if (rv.type & CMPI_ARRAY && rv.value.array) {
        rv.value.array = native_make_CMPIArray((CMPIData *) rv.value.array,
                                               NULL, &cls->hdr);
      }
      if (rc)
        CMSetStatus(rc, CMPI_RC_OK);
      return rv;
    };
  }
  if (rc)
    CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
  return rv_notfound;
}
コード例 #8
0
ファイル: constClass.c プロジェクト: mchasal/SFCB
static CMPIData
getPropQualifier(CMPIConstClass * cc, const char *cp, const char *cpq,
                 CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  ClSection      *prps = &cls->properties;
  char           *n = NULL;
  CMPIData        rv_notFound = { 0, CMPI_notFound, {0} };
  CMPIData        rv;
  CMPICount       p = ClObjectLocateProperty(&cls->hdr, prps, cp);
  CMPICount       num = ClClassGetPropQualifierCount(cls, p - 1);
  CMPICount       i;

  /*
   * special qualifier handling 
   */
  if (strcasecmp(cpq, "key") == 0) {
    unsigned long   quals;
    getPropertyQualsAt(cc, p - 1, NULL, &quals, NULL, rc);
    if (quals & ClProperty_Q_Key) {
      rv.type = CMPI_boolean;
      rv.state = CMPI_goodValue;
      rv.value.boolean = 1;
      if (rc)
        CMSetStatus(rc, CMPI_RC_OK);
      return rv;
    } else {
      if (rc) 
        CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
      return rv_notFound;
    }
  }
  if (strcasecmp(cpq, "embeddedobject") == 0) {
    unsigned long quals;
    getPropertyQualsAt(cc,p-1,NULL,&quals,NULL,rc);
    if (quals &  ClProperty_Q_EmbeddedObject) {
      rv.type = CMPI_boolean;
      rv.state = CMPI_goodValue;
      rv.value.boolean = 1;
      if (rc)
        CMSetStatus(rc, CMPI_RC_OK);
      return rv;
    } else {
      if (rc) 
        CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
      return rv_notFound;
    }
  }

  for (i = 0; i < num; i++) {
    if (ClClassGetPropQualifierAt(cls, p - 1, i, &rv, &n) == 0
        && strcasecmp(cpq, n) == 0) {
      if (rv.type == CMPI_chars) {
        rv.value.string = sfcb_native_new_CMPIString(ClObjectGetClString
                                                     (&cls->hdr,
                                                      (ClString *) &
                                                      rv.value.chars),
                                                     NULL, 0);
        rv.type = CMPI_string;
      } else if ((rv.type & CMPI_ARRAY) && rv.value.dataPtr.ptr) {
        rv.value.array =
            native_make_CMPIArray((CMPIData *) rv.value.dataPtr.ptr, NULL,
                                  &cls->hdr);
      }
      if (rc)
        CMSetStatus(rc, CMPI_RC_OK);
      return rv;
    }
    if (n && isMallocedStrBuf(&cls->hdr)) {
      free(n);
    }
  }
  if (rc) {
    CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
  }
  return rv_notFound;
}