[RFC 08/21] conf: Generate virNetworkDNSTxtDefFormatBuf

Shi Lei shi_lei at massclouds.com
Tue Jun 30 16:07:22 UTC 2020


>On Wed, Jun 10, 2020 at 09:20:36AM +0800, Shi Lei wrote:
>> Signed-off-by: Shi Lei <shi_lei at massclouds.com>
>> ---
>>  src/conf/network_conf.c | 4 ++--
>>  src/conf/network_conf.h | 2 +-
>>  2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
>> index 964a8a7..b807bac 100644
>> --- a/src/conf/network_conf.c
>> +++ b/src/conf/network_conf.c
>> @@ -2280,8 +2280,8 @@ virNetworkDNSDefFormat(virBufferPtr buf,
>>      }
>> 
>>      for (i = 0; i < def->ntxts; i++) {
>> -        virBufferEscapeString(buf, "<txt name='%s' ", def->txts[i].name);
>> -        virBufferEscapeString(buf, "value='%s'/>\n", def->txts[i].value);
>> +        if (virNetworkDNSTxtDefFormatBuf(buf, "txt", &def->txts[i], NULL) < 0)
>> +            return -1;
>>      }
>
>For sake of review, the new code looks like this:
>
>int
>virNetworkDNSTxtDefFormatBuf(virBufferPtr buf,
>                             const char *name,
>                             const virNetworkDNSTxtDef *def,
>                             void *opaque)
>{
>    VIR_USED(opaque);
>
>    if (!def)
>        return 0;
>
>    if (!(def->name || def->value))
>        return 0;
>
>    virBufferAsprintf(buf, "<%s", name);
>
>    if (def->name)
>        virBufferAsprintf(buf, " name='%s'", def->name);
>
>    if (def->value)
>        virBufferAsprintf(buf, " value='%s'", def->value);
>
>    virBufferAddLit(buf, "/>\n");
>
>    return 0;
>}
>
>This is a lot longer, but obviously the code is more general
>purpose.
>
>I'm not sure why we need to pass "txt" into this method though.
>Can't we just hardcode "<txt" instead of formatting "<%s", name ?
> 

The format function is generated based on Struct. A struct doesn't hold
element name. Only a member can hold element/attribute name.
So this name should be passed into format function as a argument.

E.g., virNetworkDNSTxtDefFormatBuf is generated based on virNetworkDNSTxtDef,
and 'txt' is specified by the member txts of virNetworkDNSDef.

And also, if there're two members which have the same struct-type, they
can reuse a unique format function and pass different tag names into it.

Regards,
Shi Lei


>
>Regards,
>Daniel
>--
>|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
>|: https://libvirt.org -o- https://fstop138.berrange.com :|
>|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
>




More information about the libvir-list mailing list