On Thu, Oct 21, 2010 at 03:58:50PM -0600, Eric Blake wrote:
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"?
Well coming from a QEmu usage, people will likely just expect
"version" as that's what is used on the command line. I think matching
by subset is less likely to get users wondering why this doesn't work
as expected. Since we don't do exact name checking on input, I think
it's better to be flexible.
>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?
No actually that's different entries :-)
But qemu will complain if release is not formated as %d.%d, it takes as
a string what is 2 byte values in the SMBIOS tables. I didn't tried to
validate that at the driver level, rather let qemu report the error
I checked it shows up back up to virt-manager if something is not
formatted to its taste like the UUID
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/