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 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; }
static int cpyClass(ClClass * cl, CMPIConstClass * cc, unsigned char originId) { ClClass *ccl = (ClClass *) cc->hdl; CMPIData d; // CMPIParameter p; // CMPIType t; char *name; char *refName = NULL; int i, m, iq, mq, propId; // int parmId, methId, mp, ip; unsigned long quals; ClProperty *prop; // ClMethod *meth; // ClParameter *parm; cl->quals |= ccl->quals; for (i = 0, m = ClClassGetQualifierCount(ccl); i < m; i++) { ClClassGetQualifierAt(ccl, i, &d, &name); ClClassAddQualifierSpecial(&cl->hdr, &cl->qualifiers, name, d, &ccl->hdr); if (!(d.type & CMPI_ARRAY)) sfcb_native_release_CMPIValue(d.type, &d.value); // free(name); } for (i = 0, m = ClClassGetPropertyCount(ccl); i < m; i++) { char *pname; ClClassGetPropertyAt(ccl, i, &d, &pname, &quals, &refName); propId = ClClassAddProperty(cl, pname, d, refName); prop = ((ClProperty *) ClObjectGetClSection(&cl->hdr, &cl->properties)) + propId - 1; if (refName) { // CJB free(refName); } for (iq = 0, mq = ClClassGetPropQualifierCount(ccl, i); iq < mq; iq++) { char *qname; ClClassGetPropQualifierAt(ccl, i, iq, &d, &qname); ClClassAddPropertyQualifierSpecial(&cl->hdr, prop, qname, d, &ccl->hdr); if (!(d.type & CMPI_ARRAY)) sfcb_native_release_CMPIValue(d.type, &d.value); // CJB free(qname); } // CJB free(pname); } /* * CJB for (i=0,m=ClClassGetMethodCount(ccl); i<m; i++) { * ClClassGetMethodAt(ccl,i,&t,&name,&quals); * methId=ClClassAddMethod(cl, name, t); * meth=((ClMethod*)ClObjectGetClSection(&cl->hdr,&cl->methods))+methId-1; * * // CJB // for (iq=0,mq=ClClassGetMethQualifierCount(ccl,methId-1); * iq<mq; iq++) { // ClClassGetMethQualifierAt(ccl, meth, iq, &d, * &name); // ClClassAddMethodQualifier(&cl->hdr, meth, name, d); // } * * * for (ip=0,mp=ClClassGetMethParameterCount(ccl,methId-1); ip<mp; ip++) * { ClClassGetMethParameterAt(ccl, meth, ip, &p, &name); * parmId=ClClassAddMethParameter(&cl->hdr, meth, name, p); * parm=((ClParameter*)ClObjectGetClSection(&cl->hdr,&meth->parameters))+parmId-1; * * for (iq=0,mq=ClClassGetMethParamQualifierCount(ccl,parm); iq<mq; * iq++) { ClClassGetMethParamQualifierAt(ccl, parm, iq, &d, &name); * ClClassAddMethParamQualifier(&cl->hdr, parm, name, d); } } } */ return 0; }
static int cpyClass(ClClass * cl, CMPIConstClass * cc) { ClClass *ccl = (ClClass *) cc->hdl; CMPIData d; CMPIParameter p; CMPIType t; char *name; char *refName = NULL; int i, m, iq, mq, ip, mp, propId, methId, parmId; unsigned long quals; ClProperty *prop; ClMethod *meth; ClParameter *parm; cl->quals |= ccl->quals; for (i = 0, m = ClClassGetQualifierCount(ccl); i < m; i++) { ClClassGetQualifierAt(ccl, i, &d, &name); ClClassAddQualifierSpecial(&cl->hdr, &cl->qualifiers, name, d, &ccl->hdr); } for (i = 0, m = ClClassGetPropertyCount(ccl); i < m; i++) { ClClassGetPropertyAt(ccl, i, &d, &name, &quals, &refName); propId = ClClassAddProperty(cl, name, d, refName); if (refName) { free(refName); } prop = ((ClProperty *) ClObjectGetClSection(&cl->hdr, &cl->properties)) + propId - 1; for (iq = 0, mq = ClClassGetPropQualifierCount(ccl, i); iq < mq; iq++) { ClClassGetPropQualifierAt(ccl, i, iq, &d, &name); ClClassAddPropertyQualifierSpecial(&cl->hdr, prop, name, d, &ccl->hdr); } } for (i = 0, m = ClClassGetMethodCount(ccl); i < m; i++) { ClClassGetMethodAt(ccl, i, &t, &name, &quals); methId = ClClassAddMethod(cl, name, t); meth = ((ClMethod *) ClObjectGetClSection(&cl->hdr, &cl->methods)) + methId - 1; for (iq = 0, mq = ClClassGetMethQualifierCount(ccl, methId - 1); iq < mq; iq++) { ClClassGetMethQualifierAt(ccl, meth, iq, &d, &name); ClClassAddMethodQualifier(&cl->hdr, meth, name, d); } for (ip = 0, mp = ClClassGetMethParameterCount(ccl, methId - 1); ip < mp; ip++) { ClClassGetMethParameterAt(ccl, meth, ip, &p, &name); parmId = ClClassAddMethParameter(&cl->hdr, meth, name, p); parm = ((ClParameter *) ClObjectGetClSection(&cl->hdr, &meth->parameters)) + parmId - 1; for (iq = 0, mq = ClClassGetMethParamQualifierCount(parm); iq < mq; iq++) { ClClassGetMethParamQualifierAt(ccl, parm, iq, &d, &name); ClClassAddMethParamQualifier(&cl->hdr, parm, name, d); } } } return 0; }