[libvirt] [PATCH V3 1/4] Rework value part of name-value pairs
Stefan Berger
stefanb at linux.vnet.ibm.com
Thu Oct 27 11:41:04 UTC 2011
On 10/27/2011 06:13 AM, Daniel P. Berrange wrote:
> On Mon, Oct 24, 2011 at 12:07:27PM -0400, Stefan Berger wrote:
>> NWFilters can be provided name-value pairs using the following
>> XML notiation:
>>
>> <filterref filter='xyz'>
>> <parameter name='PORT' value='80'/>
>> <parameter name='VAL' value='abc'/>
>> </filterref>
>>
>> The internal representation currently is so that a name is stored as a
>> string and the value as well. This patch now addresses the value part of it
>> and introduces a data structure for storing a value either as a simple
>> value or as an array for later support of lists (provided in python-like
>> notation ( [a,b,c] ).
>>
>> This patch adjusts all code that was handling the values in hash tables
>> and makes it use the new data type.
>>
>> Signed-off-by: Stefan Berger<stefanb at linux.vnet.ibm.com>
>>
>> ---
>> src/conf/domain_conf.c | 2
>> src/conf/nwfilter_params.c | 288 ++++++++++++++++++++++++++++--
>> src/conf/nwfilter_params.h | 38 +++
>> src/libvirt_private.syms | 3
>> src/nwfilter/nwfilter_ebiptables_driver.c | 15 +
>> src/nwfilter/nwfilter_gentech_driver.c | 27 ++
>> src/nwfilter/nwfilter_learnipaddr.c | 13 +
>> 7 files changed, 365 insertions(+), 21 deletions(-)
>> +bool
>> +virNWFilterVarValueDelValue(virNWFilterVarValuePtr val, const char *value)
>> +{
>> + unsigned int i;
>> +
>> + switch (val->valType) {
>> + case NWFILTER_VALUE_TYPE_SIMPLE:
>> + return false;
>> +
>> + case NWFILTER_VALUE_TYPE_ARRAY:
>> + for (i = 0; i< val->u.array.nValues; i++) {
>> + if (STREQ(value, val->u.array.values[i])) {
>> + VIR_FREE(val->u.array.values[i]);
>> + val->u.array.nValues--;
>> + val->u.array.values[i] =
>> + val->u.array.values[val->u.array.nValues];
>> + return true;
> This doesn't look right. Consider
>
> | A | B | C | D | E |
>
> And you're deleting 'B'. This code will result in a list
>
> | A | C | C | D |
>
We had nValues = 5 here. We remove item at i=1. nValues = 4 now.
array[1] = array[4] = 'E' -> A | E | C | D.
But it's wrong since I should preserve the ordering of the elements. I
fixed it. Will post a v4. Thanks for the review.
Stefan
More information about the libvir-list
mailing list