[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xl: simplify configuration parsing with local variables
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1280247623 -3600 # Node ID 987ec65d03288f71632128ca8937c1633ba75a6b # Parent adbc1ad1e81b176b0e13b9ae630c0e9e17323e3e xl: simplify configuration parsing with local variables Replace repeated patterns of "d_config->THING[d_config->num_THING]" with a single local variable. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxl/xl_cmdimpl.c | 157 ++++++++++++++++++++++++++--------------------- 1 files changed, 90 insertions(+), 67 deletions(-) diff -r adbc1ad1e81b -r 987ec65d0328 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Tue Jul 27 17:17:09 2010 +0100 +++ b/tools/libxl/xl_cmdimpl.c Tue Jul 27 17:20:23 2010 +0100 @@ -708,58 +708,63 @@ static void parse_config_data(const char d_config->num_disks = 0; d_config->disks = NULL; while ((buf = xlu_cfg_get_listitem (vbds, d_config->num_disks)) != NULL) { + libxl_device_disk *disk; char *buf2 = strdup(buf); char *p, *p2; + d_config->disks = (libxl_device_disk *) realloc(d_config->disks, sizeof (libxl_device_disk) * (d_config->num_disks + 1)); - d_config->disks[d_config->num_disks].backend_domid = 0; - d_config->disks[d_config->num_disks].domid = 0; - d_config->disks[d_config->num_disks].unpluggable = 0; + disk = d_config->disks + d_config->num_disks; + + disk->backend_domid = 0; + disk->domid = 0; + disk->unpluggable = 0; + p = strtok(buf2, ",:"); while (*p == ' ') p++; if (!strcmp(p, "phy")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_PHY; + disk->phystype = PHYSTYPE_PHY; } else if (!strcmp(p, "file")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_FILE; + disk->phystype = PHYSTYPE_FILE; } else if (!strcmp(p, "tap")) { p = strtok(NULL, ":"); if (!strcmp(p, "aio")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_AIO; + disk->phystype = PHYSTYPE_AIO; } else if (!strcmp(p, "vhd")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_VHD; + disk->phystype = PHYSTYPE_VHD; } else if (!strcmp(p, "qcow")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_QCOW; + disk->phystype = PHYSTYPE_QCOW; } else if (!strcmp(p, "qcow2")) { - d_config->disks[d_config->num_disks].phystype = PHYSTYPE_QCOW2; + disk->phystype = PHYSTYPE_QCOW2; } } p = strtok(NULL, ","); while (*p == ' ') p++; - d_config->disks[d_config->num_disks].physpath= strdup(p); + disk->physpath= strdup(p); p = strtok(NULL, ","); while (*p == ' ') p++; p2 = strchr(p, ':'); if (p2 == NULL) { - d_config->disks[d_config->num_disks].virtpath = strdup(p); - d_config->disks[d_config->num_disks].is_cdrom = 0; - d_config->disks[d_config->num_disks].unpluggable = 1; + disk->virtpath = strdup(p); + disk->is_cdrom = 0; + disk->unpluggable = 1; } else { *p2 = '\0'; - d_config->disks[d_config->num_disks].virtpath = strdup(p); + disk->virtpath = strdup(p); if (!strcmp(p2 + 1, "cdrom")) { - d_config->disks[d_config->num_disks].is_cdrom = 1; - d_config->disks[d_config->num_disks].unpluggable = 1; + disk->is_cdrom = 1; + disk->unpluggable = 1; } else - d_config->disks[d_config->num_disks].is_cdrom = 0; + disk->is_cdrom = 0; } p = strtok(NULL, ","); while (*p == ' ') p++; - d_config->disks[d_config->num_disks].readwrite = (p[0] == 'w') ? 1 : 0; + disk->readwrite = (p[0] == 'w') ? 1 : 0; free(buf2); - d_config->num_disks = d_config->num_disks + 1; + d_config->num_disks++; } } @@ -767,10 +772,14 @@ static void parse_config_data(const char d_config->num_vifs = 0; d_config->vifs = NULL; while ((buf = xlu_cfg_get_listitem (nics, d_config->num_vifs)) != NULL) { + libxl_device_nic *nic; char *buf2 = strdup(buf); char *p, *p2; + d_config->vifs = (libxl_device_nic *) realloc(d_config->vifs, sizeof (libxl_device_nic) * (d_config->num_vifs+1)); - init_nic_info(d_config->vifs + d_config->num_vifs, d_config->num_vifs); + nic = d_config->vifs + d_config->num_vifs; + init_nic_info(nic, d_config->num_vifs); + p = strtok(buf2, ","); if (!p) goto skip; @@ -781,39 +790,39 @@ static void parse_config_data(const char break; *p2 = '\0'; if (!strcmp(p, "model")) { - d_config->vifs[d_config->num_vifs].model = strdup(p2 + 1); + nic->model = strdup(p2 + 1); } else if (!strcmp(p, "mac")) { char *p3 = p2 + 1; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[0] = strtol(p3, NULL, 16); + nic->mac[0] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[1] = strtol(p3, NULL, 16); + nic->mac[1] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[2] = strtol(p3, NULL, 16); + nic->mac[2] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[3] = strtol(p3, NULL, 16); + nic->mac[3] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[4] = strtol(p3, NULL, 16); + nic->mac[4] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - d_config->vifs[d_config->num_vifs].mac[5] = strtol(p3, NULL, 16); + nic->mac[5] = strtol(p3, NULL, 16); } else if (!strcmp(p, "bridge")) { - d_config->vifs[d_config->num_vifs].bridge = strdup(p2 + 1); + nic->bridge = strdup(p2 + 1); } else if (!strcmp(p, "type")) { if (!strcmp(p2 + 1, "ioemu")) - d_config->vifs[d_config->num_vifs].nictype = NICTYPE_IOEMU; + nic->nictype = NICTYPE_IOEMU; else - d_config->vifs[d_config->num_vifs].nictype = NICTYPE_VIF; + nic->nictype = NICTYPE_VIF; } else if (!strcmp(p, "ip")) { - inet_pton(AF_INET, p2 + 1, &d_config->vifs[d_config->num_vifs].ip); + inet_pton(AF_INET, p2 + 1, &nic->ip); } else if (!strcmp(p, "script")) { - d_config->vifs[d_config->num_vifs].script = strdup(p2 + 1); + nic->script = strdup(p2 + 1); } else if (!strcmp(p, "vifname")) { - d_config->vifs[d_config->num_vifs].ifname = strdup(p2 + 1); + nic->ifname = strdup(p2 + 1); } else if (!strcmp(p, "rate")) { fprintf(stderr, "the rate parameter for vifs is currently not supported\n"); } else if (!strcmp(p, "accel")) { @@ -822,7 +831,7 @@ static void parse_config_data(const char } while ((p = strtok(NULL, ",")) != NULL); skip: free(buf2); - d_config->num_vifs = d_config->num_vifs + 1; + d_config->num_vifs++; } } @@ -830,39 +839,42 @@ skip: d_config->num_vif2s = 0; d_config->vif2s = NULL; while ((buf = xlu_cfg_get_listitem(net2s, d_config->num_vif2s))) { + libxl_device_net2 *net2; char *buf2 = strdup(buf); char *p; d_config->vif2s = realloc(d_config->vif2s, sizeof (libxl_device_net2) * (d_config->num_vif2s + 1)); - init_net2_info(d_config->vif2s + d_config->num_vif2s, d_config->num_vif2s); + net2 = d_config->vif2s + d_config->num_vif2s; + + init_net2_info(net2, d_config->num_vif2s); for (p = strtok(buf2, ","); p; p = strtok(buf2, ",")) { while (isblank(*p)) p++; if (!strncmp("front_mac=", p, 10)) { - libxl_strtomac(p + 10, d_config->vif2s[d_config->num_vif2s].front_mac); + libxl_strtomac(p + 10, net2->front_mac); } else if (!strncmp("back_mac=", p, 9)) { - libxl_strtomac(p + 9, d_config->vif2s[d_config->num_vif2s].back_mac); + libxl_strtomac(p + 9, net2->back_mac); } else if (!strncmp("backend=", p, 8)) { - domain_qualifier_to_domid(p + 8, &d_config->vif2s[d_config->num_vif2s].backend_domid, 0); + domain_qualifier_to_domid(p + 8, &net2->backend_domid, 0); } else if (!strncmp("trusted=", p, 8)) { - d_config->vif2s[d_config->num_vif2s].trusted = (*(p + 8) == '1'); + net2->trusted = (*(p + 8) == '1'); } else if (!strncmp("back_trusted=", p, 13)) { - d_config->vif2s[d_config->num_vif2s].back_trusted = (*(p + 13) == '1'); + net2->back_trusted = (*(p + 13) == '1'); } else if (!strncmp("bridge=", p, 7)) { - d_config->vif2s[d_config->num_vif2s].bridge = strdup(p + 13); + net2->bridge = strdup(p + 13); } else if (!strncmp("filter_mac=", p, 11)) { - d_config->vif2s[d_config->num_vif2s].filter_mac = (*(p + 11) == '1'); + net2->filter_mac = (*(p + 11) == '1'); } else if (!strncmp("front_filter_mac=", p, 17)) { - d_config->vif2s[d_config->num_vif2s].front_filter_mac = (*(p + 17) == '1'); + net2->front_filter_mac = (*(p + 17) == '1'); } else if (!strncmp("pdev=", p, 5)) { - d_config->vif2s[d_config->num_vif2s].pdev = strtoul(p + 5, NULL, 10); + net2->pdev = strtoul(p + 5, NULL, 10); } else if (!strncmp("max_bypasses=", p, 13)) { - d_config->vif2s[d_config->num_vif2s].max_bypasses = strtoul(p + 13, NULL, 10); + net2->max_bypasses = strtoul(p + 13, NULL, 10); } } free(buf2); - ++d_config->num_vif2s; + d_config->num_vif2s++; } } @@ -872,13 +884,19 @@ skip: d_config->vfbs = NULL; d_config->vkbs = NULL; while ((buf = xlu_cfg_get_listitem (cvfbs, d_config->num_vfbs)) != NULL) { + libxl_device_vfb *vfb; + libxl_device_vkb *vkb; + char *buf2 = strdup(buf); char *p, *p2; + d_config->vfbs = (libxl_device_vfb *) realloc(d_config->vfbs, sizeof(libxl_device_vfb) * (d_config->num_vfbs + 1)); - init_vfb_info(d_config->vfbs + d_config->num_vfbs, d_config->num_vfbs); + vfb = d_config->vfbs + d_config->num_vfbs; + init_vfb_info(vfb, d_config->num_vfbs); d_config->vkbs = (libxl_device_vkb *) realloc(d_config->vkbs, sizeof(libxl_device_vkb) * (d_config->num_vkbs + 1)); - init_vkb_info(d_config->vkbs + d_config->num_vkbs, d_config->num_vkbs); + vkb = d_config->vkbs + d_config->num_vkbs; + init_vkb_info(vkb, d_config->num_vkbs); p = strtok(buf2, ","); if (!p) @@ -890,31 +908,31 @@ skip: break; *p2 = '\0'; if (!strcmp(p, "vnc")) { - d_config->vfbs[d_config->num_vfbs].vnc = atoi(p2 + 1); + vfb->vnc = atoi(p2 + 1); } else if (!strcmp(p, "vnclisten")) { - d_config->vfbs[d_config->num_vfbs].vnclisten = strdup(p2 + 1); + vfb->vnclisten = strdup(p2 + 1); } else if (!strcmp(p, "vncpasswd")) { - d_config->vfbs[d_config->num_vfbs].vncpasswd = strdup(p2 + 1); + vfb->vncpasswd = strdup(p2 + 1); } else if (!strcmp(p, "vncdisplay")) { - d_config->vfbs[d_config->num_vfbs].vncdisplay = atoi(p2 + 1); + vfb->vncdisplay = atoi(p2 + 1); } else if (!strcmp(p, "vncunused")) { - d_config->vfbs[d_config->num_vfbs].vncunused = atoi(p2 + 1); + vfb->vncunused = atoi(p2 + 1); } else if (!strcmp(p, "keymap")) { - d_config->vfbs[d_config->num_vfbs].keymap = strdup(p2 + 1); + vfb->keymap = strdup(p2 + 1); } else if (!strcmp(p, "sdl")) { - d_config->vfbs[d_config->num_vfbs].sdl = atoi(p2 + 1); + vfb->sdl = atoi(p2 + 1); } else if (!strcmp(p, "opengl")) { - d_config->vfbs[d_config->num_vfbs].opengl = atoi(p2 + 1); + vfb->opengl = atoi(p2 + 1); } else if (!strcmp(p, "display")) { - d_config->vfbs[d_config->num_vfbs].display = strdup(p2 + 1); + vfb->display = strdup(p2 + 1); } else if (!strcmp(p, "xauthority")) { - d_config->vfbs[d_config->num_vfbs].xauthority = strdup(p2 + 1); + vfb->xauthority = strdup(p2 + 1); } } while ((p = strtok(NULL, ",")) != NULL); skip_vfb: free(buf2); - d_config->num_vfbs = d_config->num_vfbs + 1; - d_config->num_vkbs = d_config->num_vkbs + 1; + d_config->num_vfbs++; + d_config->num_vkbs++; } } @@ -928,11 +946,15 @@ skip_vfb: d_config->num_pcidevs = 0; d_config->pcidevs = NULL; while ((buf = xlu_cfg_get_listitem (pcis, d_config->num_pcidevs)) != NULL) { + libxl_device_pci *pcidev; unsigned int domain = 0, bus = 0, dev = 0, func = 0, vdevfn = 0; char *buf2 = strdup(buf); char *p; + d_config->pcidevs = (libxl_device_pci *) realloc(d_config->pcidevs, sizeof (libxl_device_pci) * (d_config->num_pcidevs + 1)); - memset(d_config->pcidevs + d_config->num_pcidevs, 0x00, sizeof(libxl_device_pci)); + pcidev = d_config->pcidevs + d_config->num_pcidevs; + memset(pcidev, 0x00, sizeof(libxl_device_pci)); + p = strtok(buf2, ","); if (!p) goto skip_pci; @@ -943,21 +965,22 @@ skip_vfb: goto skip_pci; } } - libxl_device_pci_init(d_config->pcidevs + d_config->num_pcidevs, domain, bus, dev, func, vdevfn); - d_config->pcidevs[d_config->num_pcidevs].msitranslate = pci_msitranslate; - d_config->pcidevs[d_config->num_pcidevs].power_mgmt = pci_power_mgmt; + + libxl_device_pci_init(pcidev, domain, bus, dev, func, vdevfn); + pcidev->msitranslate = pci_msitranslate; + pcidev->power_mgmt = pci_power_mgmt; while ((p = strtok(NULL, ",=")) != NULL) { while (*p == ' ') p++; if (!strcmp(p, "msitranslate")) { p = strtok(NULL, ",="); - d_config->pcidevs[d_config->num_pcidevs].msitranslate = atoi(p); + pcidev->msitranslate = atoi(p); } else if (!strcmp(p, "power_mgmt")) { p = strtok(NULL, ",="); - d_config->pcidevs[d_config->num_pcidevs].power_mgmt = atoi(p); + pcidev->power_mgmt = atoi(p); } } - d_config->num_pcidevs = d_config->num_pcidevs + 1; + d_config->num_pcidevs++; skip_pci: free(buf2); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |