[libvirt] [PATCH v2 07/25] src/xenxs:Refactor code parsing Vfb config

Jim Fehlig jfehlig at suse.com
Mon Aug 4 20:07:00 UTC 2014


David Kiarie wrote:
> From: Kiarie Kahurani <davidkiarie4 at gmail.com>
>
> introduce function
>   xenParseXMVfb(virConfPtr conf,.......)
> which parses Vfb config
>
> signed-off-by: David Kiarie<davidkiarie4 at gmail.com>
> ---
>  src/xenxs/xen_xm.c | 296 ++++++++++++++++++++++++++++-------------------------
>  1 file changed, 154 insertions(+), 142 deletions(-)
>
> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
> index 2c36c1b..38434be 100644
> --- a/src/xenxs/xen_xm.c
> +++ b/src/xenxs/xen_xm.c
> @@ -695,6 +695,158 @@ int xenParseXMDisk(virConfPtr conf, virDomainDefPtr def,
>      return 0;
>  }
>  
> +static
> +int xenParseXMVfb(virConfPtr conf, virDomainDefPtr def,
> +                  int xendConfigVersion)
>   

Ah, just noticed all the patches thus far have the function return type
and name on the same line.  Remember that the libvirt pattern is to have
them on separate lines, e.g.

static int
xenParsexmVfb()


> +{
> +    int val;
> +    char *listenAddr = NULL;
> +    //const char *str = NULL;
> +    int hvm = STREQ(def->os.type, "hvm");
> +    virConfValuePtr list;
> +    virDomainGraphicsDefPtr graphics = NULL;
> +
> +    if (hvm || xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
> +        if (xenXMConfigGetBool(conf, "vnc", &val, 0) < 0)
> +            goto cleanup;
> +        if (val) {
> +            if (VIR_ALLOC(graphics) < 0)
> +                goto cleanup;
> +            graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
> +            if (xenXMConfigGetBool(conf, "vncunused", &val, 1) < 0)
> +                goto cleanup;
> +            graphics->data.vnc.autoport = val ? 1 : 0;
> +            if (!graphics->data.vnc.autoport) {
> +                unsigned long vncdisplay;
> +                if (xenXMConfigGetULong(conf, "vncdisplay", &vncdisplay, 0) < 0)
> +                    goto cleanup;
> +                graphics->data.vnc.port = (int)vncdisplay + 5900;
> +            }
> +
> +            if (xenXMConfigCopyStringOpt(conf, "vnclisten", &listenAddr) < 0)
> +                goto cleanup;
> +            if (listenAddr &&
> +                virDomainGraphicsListenSetAddress(graphics, 0, listenAddr,
> +                                                  -1, true) < 0) {
> +               goto cleanup;
> +            }
> +
> +            VIR_FREE(listenAddr);
> +            if (xenXMConfigCopyStringOpt(conf, "vncpasswd", &graphics->data.vnc.auth.passwd) < 0)
> +                goto cleanup;
> +            if (xenXMConfigCopyStringOpt(conf, "keymap", &graphics->data.vnc.keymap) < 0)
> +                goto cleanup;
> +            if (VIR_ALLOC_N(def->graphics, 1) < 0)
> +                goto cleanup;
> +            def->graphics[0] = graphics;
> +            def->ngraphics = 1;
> +            graphics = NULL;
> +        } else {
> +            if (xenXMConfigGetBool(conf, "sdl", &val, 0) < 0)
> +                goto cleanup;
> +            if (val) {
> +                if (VIR_ALLOC(graphics) < 0)
> +                    goto cleanup;
> +                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
> +                if (xenXMConfigCopyStringOpt(conf, "display", &graphics->data.sdl.display) < 0)
> +                    goto cleanup;
> +                if (xenXMConfigCopyStringOpt(conf, "xauthority", &graphics->data.sdl.xauth) < 0)
> +                    goto cleanup;
> +                if (VIR_ALLOC_N(def->graphics, 1) < 0)
> +                    goto cleanup;
> +                def->graphics[0] = graphics;
> +                def->ngraphics = 1;
> +                graphics = NULL;
> +            }
> +        }
> +    }
> +
> +    if (!hvm && def->graphics == NULL) { /* New PV guests use this format */
> +        list = virConfGetValue(conf, "vfb");
> +        if (list && list->type == VIR_CONF_LIST &&
> +            list->list && list->list->type == VIR_CONF_STRING &&
> +            list->list->str) {
> +            char vfb[MAX_VFB];
> +            char *key = vfb;
> +
> +            if (virStrcpyStatic(vfb, list->list->str) == NULL) {
> +                virReportError(VIR_ERR_INTERNAL_ERROR,
> +                               _("VFB %s too big for destination"),
> +                               list->list->str);
> +                goto cleanup;
> +            }
> +
> +            if (VIR_ALLOC(graphics) < 0)
> +                goto cleanup;
> +            if (strstr(key, "type=sdl"))
> +                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
> +            else
> +                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
> +            while (key) {
> +                char *nextkey = strchr(key, ',');
> +                char *end = nextkey;
> +                if (nextkey) {
> +                    *end = '\0';
> +                    nextkey++;
> +                }
> +
> +                if (!strchr(key, '='))
> +                    break;
> +                if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
> +                    if (STRPREFIX(key, "vncunused=")) {
> +                        if (STREQ(key + 10, "1"))
> +                            graphics->data.vnc.autoport = true;
> +                    } else if (STRPREFIX(key, "vnclisten=")) {
> +                        if (virDomainGraphicsListenSetAddress(graphics, 0, key+10,
> +                                                              -1, true) < 0)
> +                            goto cleanup;
> +                    } else if (STRPREFIX(key, "vncpasswd=")) {
> +                        if (VIR_STRDUP(graphics->data.vnc.auth.passwd, key + 10) < 0)
> +                            goto cleanup;
> +                    } else if (STRPREFIX(key, "keymap=")) {
> +                        if (VIR_STRDUP(graphics->data.vnc.keymap, key + 7) < 0)
> +                            goto cleanup;
> +                    } else if (STRPREFIX(key, "vncdisplay=")) {
> +                        if (virStrToLong_i(key + 11, NULL, 10,
> +                                           &graphics->data.vnc.port) < 0) {
> +                            virReportError(VIR_ERR_INTERNAL_ERROR,
> +                                           _("invalid vncdisplay value '%s'"),
> +                                           key + 11);
> +                            goto cleanup;
> +                        }
> +                        graphics->data.vnc.port += 5900;
> +                    }
> +                } else {
> +                    if (STRPREFIX(key, "display=")) {
> +                        if (VIR_STRDUP(graphics->data.sdl.display, key + 8) < 0)
> +                            goto cleanup;
> +                    } else if (STRPREFIX(key, "xauthority=")) {
> +                        if (VIR_STRDUP(graphics->data.sdl.xauth, key + 11) < 0)
> +                            goto cleanup;
> +                    }
> +                }
> +
> +                while (nextkey && (nextkey[0] == ',' ||
> +                                   nextkey[0] == ' ' ||
> +                                   nextkey[0] == '\t'))
> +                    nextkey++;
> +                key = nextkey;
> +            }
> +            if (VIR_ALLOC_N(def->graphics, 1) < 0)
> +                goto cleanup;
> +            def->graphics[0] = graphics;
> +            def->ngraphics = 1;
> +            graphics = NULL;
> +        }
> +    }
> +
> +    return 0;
> +
> + cleanup:
> +    virDomainGraphicsDefFree(graphics);
> +    return -1;
> +}
> +
>  
>  virDomainDefPtr
>  xenParseXM(virConfPtr conf, int xendConfigVersion,
> @@ -702,7 +854,6 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>  {
>      const char *str;
>      int hvm = 0;
> -    int val;
>      virConfValuePtr list;
>      virDomainDefPtr def = NULL;
>      virDomainDiskDefPtr disk = NULL;
> @@ -814,6 +965,8 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>          goto cleanup;
>      if (xenParseXMDisk(conf, def, xendConfigVersion) < 0)
>          goto cleanup;
> +    if (xenParseXMVfb(conf, def, xendConfigVersion) < 0)
> +        goto cleanup;
>      if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator) < 0)
>          goto cleanup;
>      list = virConfGetValue(conf, "vif");
> @@ -987,147 +1140,6 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>          }
>      }
>  
> -    /* HVM guests, or old PV guests use this config format */
> -    if (hvm || xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
> -        if (xenXMConfigGetBool(conf, "vnc", &val, 0) < 0)
> -            goto cleanup;
> -
> -        if (val) {
> -            if (VIR_ALLOC(graphics) < 0)
> -                goto cleanup;
> -            graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
> -            if (xenXMConfigGetBool(conf, "vncunused", &val, 1) < 0)
> -                goto cleanup;
> -            graphics->data.vnc.autoport = val ? 1 : 0;
> -
> -            if (!graphics->data.vnc.autoport) {
> -                unsigned long vncdisplay;
> -                if (xenXMConfigGetULong(conf, "vncdisplay", &vncdisplay, 0) < 0)
> -                    goto cleanup;
> -                graphics->data.vnc.port = (int)vncdisplay + 5900;
> -            }
> -
> -            if (xenXMConfigCopyStringOpt(conf, "vnclisten", &listenAddr) < 0)
> -                goto cleanup;
> -            if (listenAddr &&
> -                virDomainGraphicsListenSetAddress(graphics, 0, listenAddr,
> -                                                  -1, true) < 0) {
> -               goto cleanup;
> -            }
> -            VIR_FREE(listenAddr);
> -
> -            if (xenXMConfigCopyStringOpt(conf, "vncpasswd", &graphics->data.vnc.auth.passwd) < 0)
> -                goto cleanup;
> -            if (xenXMConfigCopyStringOpt(conf, "keymap", &graphics->data.vnc.keymap) < 0)
> -                goto cleanup;
> -
> -            if (VIR_ALLOC_N(def->graphics, 1) < 0)
> -                goto cleanup;
> -            def->graphics[0] = graphics;
> -            def->ngraphics = 1;
> -            graphics = NULL;
> -        } else {
> -            if (xenXMConfigGetBool(conf, "sdl", &val, 0) < 0)
> -                goto cleanup;
> -            if (val) {
> -                if (VIR_ALLOC(graphics) < 0)
> -                    goto cleanup;
> -                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
> -                if (xenXMConfigCopyStringOpt(conf, "display", &graphics->data.sdl.display) < 0)
> -                    goto cleanup;
> -                if (xenXMConfigCopyStringOpt(conf, "xauthority", &graphics->data.sdl.xauth) < 0)
> -                    goto cleanup;
> -                if (VIR_ALLOC_N(def->graphics, 1) < 0)
> -                    goto cleanup;
> -                def->graphics[0] = graphics;
> -                def->ngraphics = 1;
> -                graphics = NULL;
> -            }
> -        }
> -    }
> -
> -    if (!hvm && def->graphics == NULL) { /* New PV guests use this format */
> -        list = virConfGetValue(conf, "vfb");
> -        if (list && list->type == VIR_CONF_LIST &&
> -            list->list && list->list->type == VIR_CONF_STRING &&
> -            list->list->str) {
> -            char vfb[MAX_VFB];
> -            char *key = vfb;
> -
> -            if (virStrcpyStatic(vfb, list->list->str) == NULL) {
> -                virReportError(VIR_ERR_INTERNAL_ERROR,
> -                               _("VFB %s too big for destination"),
> -                               list->list->str);
> -                goto cleanup;
> -            }
> -
> -            if (VIR_ALLOC(graphics) < 0)
> -                goto cleanup;
> -
> -            if (strstr(key, "type=sdl"))
> -                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
> -            else
> -                graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
> -
> -            while (key) {
> -                char *nextkey = strchr(key, ',');
> -                char *end = nextkey;
> -                if (nextkey) {
> -                    *end = '\0';
> -                    nextkey++;
> -                }
> -
> -                if (!strchr(key, '='))
> -                    break;
> -
> -                if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
> -                    if (STRPREFIX(key, "vncunused=")) {
> -                        if (STREQ(key + 10, "1"))
> -                            graphics->data.vnc.autoport = true;
> -                    } else if (STRPREFIX(key, "vnclisten=")) {
> -                        if (virDomainGraphicsListenSetAddress(graphics, 0, key+10,
> -                                                              -1, true) < 0)
> -                            goto cleanup;
> -                    } else if (STRPREFIX(key, "vncpasswd=")) {
> -                        if (VIR_STRDUP(graphics->data.vnc.auth.passwd, key + 10) < 0)
> -                            goto cleanup;
> -                    } else if (STRPREFIX(key, "keymap=")) {
> -                        if (VIR_STRDUP(graphics->data.vnc.keymap, key + 7) < 0)
> -                            goto cleanup;
> -                    } else if (STRPREFIX(key, "vncdisplay=")) {
> -                        if (virStrToLong_i(key + 11, NULL, 10,
> -                                           &graphics->data.vnc.port) < 0) {
> -                            virReportError(VIR_ERR_INTERNAL_ERROR,
> -                                           _("invalid vncdisplay value '%s'"),
> -                                           key + 11);
> -                            goto cleanup;
> -                        }
> -                        graphics->data.vnc.port += 5900;
> -                    }
> -                } else {
> -                    if (STRPREFIX(key, "display=")) {
> -                        if (VIR_STRDUP(graphics->data.sdl.display, key + 8) < 0)
> -                            goto cleanup;
> -                    } else if (STRPREFIX(key, "xauthority=")) {
> -                        if (VIR_STRDUP(graphics->data.sdl.xauth, key + 11) < 0)
> -                            goto cleanup;
> -                    }
> -                }
> -
> -                while (nextkey && (nextkey[0] == ',' ||
> -                                   nextkey[0] == ' ' ||
> -                                   nextkey[0] == '\t'))
> -                    nextkey++;
> -                key = nextkey;
> -            }
> -            if (VIR_ALLOC_N(def->graphics, 1) < 0)
> -                goto cleanup;
> -            def->graphics[0] = graphics;
> -            def->ngraphics = 1;
> -            graphics = NULL;
> -        }
> -    }
> -
>      if (hvm) {
>          virDomainChrDefPtr chr = NULL;
>  
>   




More information about the libvir-list mailing list