Konkret array counts

Roman Rakus rrakus at redhat.com
Tue Feb 5 22:34:22 UTC 2013


On 02/05/2013 10:42 PM, John Dennis wrote:
> Oddly there doesn't seem to be an interface (API) in Konkret to get 
> the size of an array. This seems like a very odd omission.
>
> For instance, lets say you define a method that has an IN parameter 
> which is an array of strings, for example sake let's call this array 
> "Names", your Konkret generated method will have a parameter like this:
>
> const KStringA *Names
>
> To do anything with the Names array you have to know how many elements 
> it has, this proved difficult to figure out.
>
> The definition of KStringA looks like this:
>
> typedef struct _KStringA
> {
>     CMPIUint32 exists;
>     CMPIUint32 null;
>     const CMPIArray* value;
>     char __padding1[16 - sizeof(CMPIArray*)];
>     CMPIUint32 count;
>     char __padding2[4];
> }
> KStringA;
>
> Notice it has a count member. If you were thinking there is an 
> accessor defined as an inline or macro for the count you'd be wrong. 
> If you were thinking you could access Names->count and get a valid 
> value you would be wrong. Apparently it's never initialized.
>
> I verified that when my method is invoked via YAWN it's passing an 
> array of strings, I can see it in the generated XML. I also called the 
> XXX_Args_Print() function that Konkret generated. It also shows the 
> expected array elements. I also called KStringA_Get(Names, 0) to 
> retrieve the first element, and lo and behold got the first element.
>
> But nowhere can I find how many elements are in this array nor a way 
> to iterate it.
>
> Apparently there is nothing in Konkret to give you this critical 
> information. I resorted to calling CMPI directly (which seems like an 
> API violation) by doing this:
>
> count = CMGetArrayCount(OptionNames->value, NULL);
>
> which works.
>
> But this seems wrong, I shouldn't be reaching in to CMPI data 
> structures that Konkret is supposed to be hiding from me, *plus* 
> what's the point of the count member of the KStringA struct? BTW all 
> KArray types have a count field, by looking at the source code it 
> appears none of the count fields are initialized, unless you create 
> the array yourself via of of the K*A_Init() functions which calls 
> KArray_Init().
>
> Also, there doesn't seem to be any doc whatsoever in Konkret for 
> working with arrays. That also seems odd. Are arrays a second thought 
> in Konkret?
>
> Comments? Am I missing something?
>
> John
>
>
It's a known bug: https://bugzilla.redhat.com/show_bug.cgi?id=848480

Patches are welcome :)

RR


More information about the openlmi-devel mailing list