# HG changeset patch
# User Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
# Date 1195034692 -3600
# Node ID 785993875a6598c153829a3cfcb5e1088da9971a
# Parent c3f816e3ab5ff2a17500d8b48ec601ade58da988
compare_ref retrieves key count from internal data
The cu_compare_ref retrieves the key count out of the
internal data struct now, instead of the client given
object path. Fixes the academical case that a client
does not submit the correct number of keys.
Signed-off-by: Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
diff -r c3f816e3ab5f -r 785993875a65 instance_util.c
--- a/instance_util.c Tue Nov 13 15:33:06 2007 -0500
+++ b/instance_util.c Wed Nov 14 11:04:52 2007 +0100
@@ -89,59 +89,59 @@ static bool _compare_data(const CMPIData
}
static bool _compare_classname(const CMPIObjectPath *ref,
- const CMPIInstance *inst)
+ const CMPIObjectPath *op)
{
const char *ref_cn;
- const char *inst_cn;
- CMPIObjectPath *op;
- CMPIStatus s;
-
- op = CMGetObjectPath(inst, &s);
- if ((op == NULL) || (s.rc != CMPI_RC_OK))
- return false;
-
+ const char *op_cn;
+
ref_cn = CLASSNAME(ref);
if (ref_cn == NULL)
return false;
-
- inst_cn = CLASSNAME(op);
- if (inst_cn == NULL)
+
+ op_cn = CLASSNAME(op);
+ if (op_cn == NULL)
return false;
-
- return STREQC(inst_cn, ref_cn);
+
+ return STREQC(op_cn, ref_cn);
}
const char *cu_compare_ref(const CMPIObjectPath *ref,
const CMPIInstance *inst)
{
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+ CMPIObjectPath *op;
+ const char *prop = NULL;
int i;
- CMPIStatus s;
int count;
- const char *prop = NULL;
- count = CMGetKeyCount(ref, &s);
+ op = CMGetObjectPath(inst, &s);
+ if ((op == NULL) || (s.rc != CMPI_RC_OK))
+ return NULL;
+
+ if (!_compare_classname(ref, op))
+ return "CreationClassName";
+
+ count = CMGetKeyCount(op, &s);
if (s.rc != CMPI_RC_OK) {
CU_DEBUG("Unable to get key count");
return NULL;
}
-
- if (!_compare_classname(ref, inst))
- return "CreationClassName";
-
+ CU_DEBUG("Number of keys: %i", count);
+
for (i = 0; i < count; i++) {
CMPIData kd, pd;
CMPIString *str;
- kd = CMGetKeyAt(ref, i, &str, &s);
+ kd = CMGetKeyAt(op, i, &str, &s);
if (s.rc != CMPI_RC_OK) {
CU_DEBUG("Failed to get key %i", i);
goto out;
}
prop = CMGetCharPtr(str);
- CU_DEBUG("Comparing key `%s'", prop);
+ CU_DEBUG("Comparing key %i: `%s'", i, prop);
- pd = CMGetProperty(inst, prop, &s);
+ pd = CMGetKey(ref, prop, &s);
if (s.rc != CMPI_RC_OK) {
CU_DEBUG("Failed to get property `%s'", prop);
goto out;
Show replies by date
HE> # HG changeset patch
HE> # User Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
HE> # Date 1195034692 -3600
HE> # Node ID 785993875a6598c153829a3cfcb5e1088da9971a
HE> # Parent c3f816e3ab5ff2a17500d8b48ec601ade58da988
HE> compare_ref retrieves key count from internal data
Applied.
--
Dan Smith
IBM Linux Technology Center
Open Hypervisor Team
email: danms(a)us.ibm.com