[ 3286489 ] getInstance does not return key/value through XML
diff --git a/ChangeLog b/ChangeLog
index fbb635d..49f2981 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-05-27 Chris Buccella <buccella@linux.vnet.ibm.com>
+
+ * backend/cimxml/grammar.c, backend/cimxml/cimXmlParser.h,
+ backend/cimxml/cimXmlParser.c, backend/cimxml/instance.c,
+ backend/cimxml/objectpath.c, frontend/sfcc/native.h:
+ [ 3286489 ] getInstance does not return key/value through XML
+ (patch originated by Josef Moellers)
+
2011-04-07 Chris Buccella <buccella@linux.vnet.ibm.com>
* backend/cimxml/grammar.c:
diff --git a/NEWS b/NEWS
index cf0a070..7b4d810 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,11 @@
Small Footprint CIM Client Library NEWS
+Changes in 2.2.3
+================
+
+Bugs:
+- 3286489: getInstance does not return key/value through XML
+
Changes in 2.2.2
================
diff --git a/backend/cimxml/cimXmlParser.c b/backend/cimxml/cimXmlParser.c
index 3e0baef..c6a0908 100644
--- a/backend/cimxml/cimXmlParser.c
+++ b/backend/cimxml/cimXmlParser.c
@@ -1386,9 +1386,7 @@
control.respHdr.rvArray=newCMPIArray(0,0,NULL);
- if(cop) {
- control.da_nameSpace=(char*)getNameSpaceChars(cop);
- }
+ control.requestObjectPath = cop;
control.heap = parser_heap_init();
@@ -1531,9 +1529,7 @@
local_enmp->data = control.respHdr.rvArray ;
- if(cop) {
- control.da_nameSpace=(char*)getNameSpaceChars(cop);
- }
+ control.requestObjectPath = cop;
control.heap = parser_heap_init();
diff --git a/backend/cimxml/cimXmlParser.h b/backend/cimxml/cimXmlParser.h
index 191fa52..f34d36b 100644
--- a/backend/cimxml/cimXmlParser.h
+++ b/backend/cimxml/cimXmlParser.h
@@ -426,7 +426,7 @@
typedef struct parser_control {
XmlBuffer *xmb;
ResponseHdr respHdr;
- char *da_nameSpace;
+ CMPIObjectPath *requestObjectPath;
ParserHeap *heap;
#ifdef LARGE_VOL_SUPPORT
CMCIConnection * econ ; /* enumeration connection */
diff --git a/backend/cimxml/grammar.c b/backend/cimxml/grammar.c
index 871c58a..8fb5f91 100644
--- a/backend/cimxml/grammar.c
+++ b/backend/cimxml/grammar.c
@@ -193,7 +193,7 @@
dontLex = 1;
instance(parm, (parseUnion*)&lvalp.xtokInstance);
inst = native_new_CMPIInstance(NULL,NULL);
- setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
+ setInstNsAndCn(inst,getNameSpaceChars(parm->requestObjectPath),lvalp.xtokInstance.className);
setInstProperties(inst, &lvalp.xtokInstance.properties);
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
}
@@ -295,7 +295,7 @@
else if(stateUnion->xtokReturnValue.data.value.type == typeValue_Instance) {
t = CMPI_instance;
inst = native_new_CMPIInstance(NULL,NULL);
- setInstNsAndCn(inst,parm->da_nameSpace,stateUnion->xtokReturnValue.data.value.data.inst->className);
+ setInstNsAndCn(inst,getNameSpaceChars(parm->requestObjectPath),stateUnion->xtokReturnValue.data.value.data.inst->className);
setInstProperties(inst, &stateUnion->xtokReturnValue.data.value.data.inst->properties);
val.inst = inst;
}
@@ -452,8 +452,7 @@
do {
dontLex = 1;
instance(parm, (parseUnion*)&lvalp.xtokInstance);
- inst = native_new_CMPIInstance(NULL,NULL);
- setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
+ inst = native_new_CMPIInstance(parm->requestObjectPath,NULL);
setInstProperties(inst, &lvalp.xtokInstance.properties);
simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
ct = localLex(&lvalp, parm);
@@ -477,7 +476,7 @@
dontLex = 1;
valueNamedInstance(parm, (parseUnion*)&lvalp.xtokNamedInstance);
createPath(&op,&(lvalp.xtokNamedInstance.path));
- CMSetNameSpace(op, parm->da_nameSpace);
+ CMSetNameSpace(op, getNameSpaceChars(parm->requestObjectPath));
inst = native_new_CMPIInstance(op,NULL);
//setInstQualifiers(inst, &lvalp.xtokNamedInstance.instance.qualifiers);
setInstProperties(inst, &lvalp.xtokNamedInstance.instance.properties);
diff --git a/backend/cimxml/instance.c b/backend/cimxml/instance.c
index 43df5a4..72f034b 100644
--- a/backend/cimxml/instance.c
+++ b/backend/cimxml/instance.c
@@ -375,7 +375,7 @@
return (CMPIInstance *) instance;
}
-void setInstNsAndCn(CMPIInstance *ci, char *ns, char *cn)
+void setInstNsAndCn(CMPIInstance *ci, const char *ns, char *cn)
{
struct native_instance * i = (struct native_instance *) ci;
diff --git a/backend/cimxml/objectpath.c b/backend/cimxml/objectpath.c
index 09d0cd9..2e4df1e 100644
--- a/backend/cimxml/objectpath.c
+++ b/backend/cimxml/objectpath.c
@@ -438,6 +438,8 @@
const char *getNameSpaceChars(CMPIObjectPath * cop)
{
+ if (cop == NULL) return NULL;
+
struct native_cop * o = (struct native_cop *) cop;
return o->nameSpace;
}
diff --git a/frontend/sfcc/native.h b/frontend/sfcc/native.h
index cb1b5a7..2b14ab9 100644
--- a/frontend/sfcc/native.h
+++ b/frontend/sfcc/native.h
@@ -225,7 +225,7 @@
struct xtokValueReference;
CMPIValue str2CMPIValue(CMPIType type, char *val, struct xtokValueReference *ref);
-void setInstNsAndCn(CMPIInstance *ci, char *ns, char *cn);
+void setInstNsAndCn(CMPIInstance *ci, const char *ns, char *cn);
CMPIStatus simpleArrayAdd(CMPIArray * array, CMPIValue * val, CMPIType type);
const char *getNameSpaceChars(CMPIObjectPath * cop);
CMPIValue *getKeyValueTypePtr(char *type, char *value, struct xtokValueReference *ref,