[libvirt] [PATCH 1/3] Re-factor qemu version parsing

Daniel Veillard veillard at redhat.com
Thu Jun 11 13:49:43 UTC 2009


On Wed, Jun 10, 2009 at 09:02:39PM +0100, Mark McLoughlin wrote:
> This patch is purely re-factoring without any functional changes
> to make way for the next patch.
> 
> The main thing achieved by the refactoring is that we now have
> easier access to the parenthesised string that KVM folks seem
> to delight in changing.

  This kind of parsing looks more flexible to me, even if a bit
less readable than using pure sscanf

[...]
> +#define QEMU_VERSION_STR    "QEMU PC emulator version "
> +#define KVM_VER_PREFIX      " (kvm-"
> +
> +static int qemudParseHelpStr(const char *help,
> +                             unsigned int *flags,
> +                             unsigned int *version,
> +                             unsigned int *kvm_version)
> +{
> +    unsigned major, minor, micro;
> +    const char *p = help;
> +
> +    *flags = *version = *kvm_version = 0;
> +
> +    if (!STRPREFIX(p, QEMU_VERSION_STR))
> +        goto fail;
> +
> +    p += strlen(QEMU_VERSION_STR);

  But I would not integate the spaces in the strings and instead
use a macro like
 #define QEMU_VERSION_STR    "QEMU PC emulator version"
 #define SKIP_BLANKS(p) while ((*(p) == ' ') || (*(p) == '\t')) (p)++;

 and here do SKIP_BLANKS(p)

> +    major = virParseNumber(&p);
> +    if (major == -1 || *p != '.')
> +        goto fail;
> +
> +    ++p;
> +
> +    minor = virParseNumber(&p);
> +    if (major == -1 || *p != '.')
> +        goto fail;
> +
> +    ++p;
> +
> +    micro = virParseNumber(&p);
> +    if (major == -1)
> +        goto fail;

  and SKIP_BLANKS(p) here
and
  #define KVM_VER_PREFIX      "(kvm-"
without the leading space.

> +    if (STRPREFIX(p, KVM_VER_PREFIX)) {
> +        int ret;
> +
> +        p += strlen(KVM_VER_PREFIX);
> +
> +        ret = virParseNumber(&p);
> +        if (ret == -1)
> +            goto fail;
> +
> +        *kvm_version = ret;
[...]

  But I'm biased on parsing ... and that's not critical, ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list