[libvirt] [PREPOST 10/17] src/xenxs:Refactor xenParseXM( )

Jim Fehlig jfehlig at suse.com
Mon Jul 14 22:17:44 UTC 2014


David Kiarie wrote:
> From: Kiarie Kahurani <davidkiarie4 at gmail.com>
>
> A couple of miscellaneous fixed and wrap code common code into
> xenParseConfigCommon(...).I will drop some of the functions later
> though
>
> signed-off-by: David Kiarie<davidkiarie4 at gmail.com>
> ---
>  src/xenxs/xen_xm.c | 134 ++++++++++++++++++++++++++++-------------------------
>  src/xenxs/xen_xm.h |   3 +-
>  2 files changed, 73 insertions(+), 64 deletions(-)
>
> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
> index 312d890..657dd1c 100644
> --- a/src/xenxs/xen_xm.c
> +++ b/src/xenxs/xen_xm.c
> @@ -458,7 +458,7 @@ static int xenParseXMVif(virConfPtr conf, virDomainDefPtr def)
>      }
>  
>      return 0;
> -cleanup:
> + cleanup:
>   

This should be in 3/17 to fix 'make syntax-check'.

>      VIR_FREE(script);
>      return -1;
>  }
> @@ -1026,7 +1026,8 @@ static int xenParseXMOS(virConfPtr conf, virDomainDefPtr def)
>  
>      if (STREQ(def->os.type, "hvm")) {
>          const char *boot;
> -
> +        if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator) < 0)
> +            return -1;
>   

This replicates the next lines of code.  Not needed IMO.

>          if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator) < 0)
>              return -1;
>  
> @@ -1122,54 +1123,13 @@ static int xenParseXMMisc(virConfPtr conf, virDomainDefPtr def)
>  
>      return 0;
>  }
> -virDomainDefPtr
> -xenParseXM(virConfPtr conf, int xendConfigVersion,
> -                       virCapsPtr caps)
> +static int xenParseXMCharDev(virConfPtr conf, virDomainDefPtr def)
>  {
>      const char *str;
> -    int hvm = 0;
> -    virConfValuePtr list;
> -    virDomainDefPtr def = NULL;
> -    virDomainDiskDefPtr disk = NULL;
> -    virDomainNetDefPtr net = NULL;
> -    virDomainGraphicsDefPtr graphics = NULL;
> -    char *script = NULL;
> -    char *listenAddr = NULL;
> -
> -    if (VIR_ALLOC(def) < 0)
> -        return NULL;
> -
> -    def->virtType = VIR_DOMAIN_VIRT_XEN;
> -    def->id = -1;
> -    if (xenParseXMGeneral(conf, def, caps) < 0)
> -        goto cleanup;
> -
> -    if (xenParseXMOS(conf, def) < 0)
> -        goto cleanup;
> +    virConfValuePtr value = NULL;
> +    virDomainChrDefPtr chr = NULL;
>  
> -    hvm = (STREQ(def->os.type, "hvm"));
> -    if (xenParseXMMem(conf, def) < 0)
> -        goto cleanup;
> -    if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator) < 0)
> -        goto cleanup;
> -    if (xenParseXMVif(conf, def) < 0)
> -        goto cleanup;
> -    if (xenParseXMTimeOffset(conf, def, xendConfigVersion) < 0)
> -        goto cleanup;
> -    if (xenParseXMEventsActions(conf, def) < 0)
> -        goto cleanup;
> -    if (xenParseXMPCI(conf, def) < 0)
> -        goto cleanup;
> -    if (xenParseXMCPUFeatures(conf, def) < 0)
> -        goto cleanup;
> -    if (xenParseXMDisk(conf, def, xendConfigVersion) < 0)
> -        goto cleanup;
> -    if (xenParseXMVfb(conf, def, xendConfigVersion) < 0)
> -        goto cleanup;
> -    if (xenParseXMMisc(conf, def) < 0)
> -        goto cleanup;
> -    if (hvm) {
> -        virDomainChrDefPtr chr = NULL;
> +    if (STREQ(def->os.type, "hvm")) {
>  
>          if (xenXMConfigGetString(conf, "parallel", &str, NULL) < 0)
>              goto cleanup;
> @@ -1179,7 +1139,6 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>  
>          if (chr) {
>              if (VIR_ALLOC_N(def->parallels, 1) < 0) {
> -                virDomainChrDefFree(chr);
>                  goto cleanup;
>              }
>              chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL;
> @@ -1190,21 +1149,21 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>          }
>  
>          /* Try to get the list of values to support multiple serial ports */
> -        list = virConfGetValue(conf, "serial");
> -        if (list && list->type == VIR_CONF_LIST) {
> +        value = virConfGetValue(conf, "serial");
> +        if (value && value->type == VIR_CONF_LIST) {
>              int portnum = -1;
>  
> -            list = list->list;
> -            while (list) {
> +            value = value->list;
> +            while (value) {
>                  char *port = NULL;
>  
> -                if ((list->type != VIR_CONF_STRING) || (list->str == NULL))
> +                if ((value->type != VIR_CONF_STRING) || (value->str == NULL))
>                      goto cleanup;
>  
> -                port = list->str;
> +                port = value->str;
>                  portnum++;
>                  if (STREQ(port, "none")) {
> -                    list = list->next;
> +                    value = value->next;
>                      continue;
>                  }
>  
> @@ -1215,11 +1174,10 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>                  chr->target.port = portnum;
>  
>                  if (VIR_APPEND_ELEMENT(def->serials, def->nserials, chr) < 0) {
> -                    virDomainChrDefFree(chr);
>                      goto cleanup;
>                  }
>  
> -                list = list->next;
> +                value = value->next;
>              }
>          } else {
>              /* If domain is not using multiple serial ports we parse data old way */
> @@ -1249,16 +1207,66 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>          def->consoles[0]->target.port = 0;
>          def->consoles[0]->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
>      }
> -    VIR_FREE(script);
> +
> +    return 0;
> +
> + cleanup:
> +    virDomainChrDefFree(chr);
> +    return -1;
> +}
>   

I think introducing xenParseXMCharDev and xenParseConfigCommon should be
done in separate patches.

> +int xenParseConfigCommon(virConfPtr conf, virDomainDefPtr def,
> +                                virCapsPtr caps, int xendConfigVersion )
> +{
> +
> +    if (xenParseXMGeneral(conf, def, caps) < 0)
> +        return -1;
> +
> +    if (xenParseXMOS(conf, def) < 0)
> +        return -1;
> +
> +    if (xenParseXMMem(conf, def) < 0)
> +        return -1;
> +    if (xenParseXMTimeOffset(conf, def, xendConfigVersion) < 0)
> +        return -1;
> +    if (xenParseXMEventsActions(conf, def) < 0)
> +        return -1;
> +    if (xenParseXMPCI(conf, def) < 0)
> +        return -1;
> +    if (xenParseXMCPUFeatures(conf, def) < 0)
> +        return -1;
> +
> +    if (xenParseXMMisc(conf, def) < 0)
> +        return -1;
> +    if (xenParseXMCharDev(conf, def) < 0)
> +        return -1;
> +
> +    if (xenParseXMVfb(conf, def, xendConfigVersion) < 0)
> +        return -1;
> +
> +    return 0;
> +}
> +virDomainDefPtr
> +xenParseXM(virConfPtr conf, int xendConfigVersion,
> +                       virCapsPtr caps)
> +{
> +    virDomainDefPtr def = NULL;
> +
> +    if (VIR_ALLOC(def) < 0)
> +        return NULL;
> +
> +    def->virtType = VIR_DOMAIN_VIRT_XEN;
> +    def->id = -1;
> +    if (xenParseConfigCommon(conf, def, caps, xendConfigVersion) < 0)
> +        goto cleanup;
> +    if (xenParseXMVif(conf, def) < 0)
> +        goto cleanup;
> +    if (xenParseXMDisk(conf, def, xendConfigVersion) < 0)
> +        goto cleanup;
> +
>      return def;
>  
>   cleanup:
> -    virDomainGraphicsDefFree(graphics);
> -    virDomainNetDefFree(net);
> -    virDomainDiskDefFree(disk);
>      virDomainDefFree(def);
> -    VIR_FREE(script);
> -    VIR_FREE(listenAddr);
>   

All of these *Free calls should have been removed in the respective
patches that removed the code from xenParseXM.

>      return NULL;
>  }
>  
> diff --git a/src/xenxs/xen_xm.h b/src/xenxs/xen_xm.h
> index 629a4b3..621cbe1 100644
> --- a/src/xenxs/xen_xm.h
> +++ b/src/xenxs/xen_xm.h
> @@ -29,7 +29,8 @@
>  # include "internal.h"
>  # include "virconf.h"
>  # include "domain_conf.h"
> -
> +int xenParseConfigCommon(virConfPtr conf, virDomainDefPtr def,
> +                         virCapsPtr caps, int xendConfigVersion);
>   

Blank line between these function declarations.

Regards,
Jim

>  virConfPtr xenFormatXM(virConnectPtr conn, virDomainDefPtr def,
>                         int xendConfigVersion);
>  
>   




More information about the libvir-list mailing list