[libvirt] [PATCH] 3/4 Add SMBIOS QEmu driver

Eric Blake eblake at redhat.com
Thu Oct 21 21:58:50 UTC 2010


On 10/21/2010 02:23 PM, Daniel Veillard wrote:
> The main trouble here is that the QEmu command uses names which are
> similar to the official names for the entries used by the DMTF, but
> that mean we cant base on name equality. I was tempted to use

s/cant/can't/

> something like strcasestr to go fishing on the names but since we
> never used this in libvirt yet, and I'm not sure it's available in
> gnulib, I did the patch using strstr, assuming entries provided by the

Gnulib provides strcasestr() as LGPLv2+ (but beware - it only does what 
you want in unibyte locales); it also provides the c-strcasestr module 
(which is probably exactly what you want!), but it is currently LGPLv3+, 
although I can request on the gnulib list to have it relaxed if you'd like.

> users would contain the word in lower case usually except maybe for the
> first character. The matching glue is certainly perfectible.

c_strcasestr() would certainly make it easier.

Or, is this something where STRCASEEQ() would be good enough?  That is, 
do we expect a user to always provide the full DMTF name "BIOS Version", 
or is the substring matching important because we want to all the user 
the shortcut of "Version"?

> Also decided that if we can't associate an entry with an existing
> QEmu SMBIOS command we would ignore it. On the ther hand if a block

s/ther/other/

> other than type 0 or 1 is used in the XML definition we would emit
> a warning, but still not fail.
>
> +    /*
> +     * QEmu accepts only a limited set of System informations, and
> +     * use command line arguments shortcuts from the DMTF real names
> +     * so go fishing for those
> +     */
> +    cur = def->entries;
> +    while (cur != NULL) {
> +        /* 0:Vendor */
> +        if ((def->type == 0)&&  (strstr(cur->name, "endor")))
> +            virBufferVSprintf(&buf, ",vendor=\"%s\"", cur->value);
> +        /* 0:BIOS Version */
> +        else if ((def->type == 0)&&  (strstr(cur->name, "ersion")))
> +            virBufferVSprintf(&buf, ",version=\"%s\"", cur->value);
> +        /* 0:BIOS Release Date */
> +        else if ((def->type == 0)&&  (strstr(cur->name, "ate")))
> +            virBufferVSprintf(&buf, ",date=\"%s\"", cur->value);
> +        /* 0:System BIOS Major Release and 0:System BIOS Minor Release */
> +        else if ((def->type == 0)&&  (strstr(cur->name, "elease")))
> +            virBufferVSprintf(&buf, ",date=\"%s\"", cur->value);

If the user provides both "Date" and "Major Release" names, does qemu 
complain about the doubled-up date="" option?

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list