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; }
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; }
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; }
static const char * getCharSuperClassName(const CMPIConstClass * cc) { ClClass *cls = (ClClass *) cc->hdl; if (cls->parent.id) return ClObjectGetClString(&cls->hdr, &cls->parent); return NULL; }
static const char * getCharQualifierName(CMPIQualifierDecl * cq) { ClQualifierDeclaration *q = (ClQualifierDeclaration *) cq->hdl; if (q->qualifierName.id) return ClObjectGetClString(&q->hdr, &q->qualifierName); return NULL; }
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; }
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; }
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; }