diff -r 1cb3975921d5 -r 639fb266e1e6 eo_parser.c
--- a/eo_parser.c Mon Apr 27 16:11:32 2009 -0700
+++ b/eo_parser.c Tue Jun 02 10:55:14 2009 -0300
@@ -169,6 +169,29 @@
return CMPI_sint8;
}
+inline CMPIStatus ins_chars_into_cmstr_arr(const CMPIBroker *broker,
+ CMPIArray *arr,
+ CMPICount index,
+ char *str)
No need to make this inline.
+{
+ CMPIString *cm_str;
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+
+ cm_str = CMNewString(broker, str, &s);
+ if (s.rc != CMPI_RC_OK || CMIsNullObject(cm_str)) {
+ CU_DEBUG("Error creating CMPIString");
+ goto out;
+ }
+
+ s = CMSetArrayElementAt(arr, index, &cm_str, CMPI_string);
+ if (s.rc != CMPI_RC_OK)
+ CU_DEBUG("Error setting array element %u\n"
+ "Error code: %d", index, s.rc);
+
+ out:
+ return s;
+}
+
/*
* Local Variables:
* mode: C
diff -r 1cb3975921d5 -r 639fb266e1e6 eo_parser_xml.h
--- a/eo_parser_xml.h Mon Apr 27 16:11:32 2009 -0700
+++ b/eo_parser_xml.h Tue Jun 02 10:55:14 2009 -0300
@@ -31,6 +31,11 @@
char *prop,
CMPIInstance *inst);
+inline CMPIStatus ins_chars_into_cmstr_arr(const CMPIBroker *broker,
+ CMPIArray *arr,
+ CMPICount index,
+ char *str);
Same here - you can remove the inline.
/* NOTE - this rule only applies after a 'INSTANCE OF' has
been read in */
<READCLASSNAME>[A-Za-z][A-Za-z0-9_]* {
BEGIN INITIAL; /* Go back to normal parsing rules now */
diff -r 1cb3975921d5 -r 639fb266e1e6 eo_util_parser.y
+
+ str_arr_out:
+ free(stringarraypropname);
+ for (i = 0; i < stringarraysize - 1; i++)
+ free(stringarray[i]);
+ free($1);
+
+ if (s.rc != CMPI_RC_OK) {
+ return RC_INVALID_CLASS;
I would return s.c instead of RC_INVALID_CLASS, because the issue here
isn't an invalid class. The issue is in parsing the attribute's array
value.
Really, the eo_parse_parseinstance() should take a CMPIStatus variable
(or we should return one somehow) so that we can set the error code and
error message properly. But that's something to fix later on.
+ }
+
+ }
+ ;
--
Kaitlin Rupert
IBM Linux Technology Center
kaitlin(a)linux.vnet.ibm.com