[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/6] xl: Provide and use ARRAY_EXTEND_INIT_NODEVID for disks, pcidevs and dtdevs
This replaces 3 sets of open-coded reallocs etc. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/libxl/xl_cmdimpl.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 6ea4e6b..568d7d2 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -323,16 +323,24 @@ static char *xstrdup(const char *x) return r; } -#define ARRAY_EXTEND_INIT(array,count,initfn) \ +#define ARRAY_EXTEND_INIT__CORE(array,count,initfn,more) \ ({ \ typeof((count)) array_extend_old_count = (count); \ (count)++; \ (array) = xrealloc((array), sizeof(*array) * (count)); \ (initfn)(&(array)[array_extend_old_count]); \ - (array)[array_extend_old_count].devid = array_extend_old_count; \ + more; \ &(array)[array_extend_old_count]; \ }) +#define ARRAY_EXTEND_INIT(array,count,initfn) \ + ARRAY_EXTEND_INIT__CORE((array),(count),(initfn), ({ \ + (array)[array_extend_old_count].devid = array_extend_old_count; \ + })) + +#define ARRAY_EXTEND_INIT_NODEVID(array,count,initfn) \ + ARRAY_EXTEND_INIT__CORE((array),(count),(initfn), /* nothing */ ) + #define LOG(_f, _a...) dolog(__FILE__, __LINE__, __func__, _f "\n", ##_a) static void dolog(const char *file, int line, const char *func, char *fmt, ...) @@ -1683,12 +1691,12 @@ static void parse_config_data(const char *config_source, libxl_device_disk *disk; char *buf2 = strdup(buf); - d_config->disks = (libxl_device_disk *) realloc(d_config->disks, sizeof (libxl_device_disk) * (d_config->num_disks + 1)); - disk = d_config->disks + d_config->num_disks; + disk = ARRAY_EXTEND_INIT_NODEVID(d_config->disks, + d_config->num_disks, + libxl_device_disk_init); parse_disk_config(&config, buf2, disk); free(buf2); - d_config->num_disks++; } } @@ -1929,10 +1937,9 @@ skip_vfb: for(i = 0; (buf = xlu_cfg_get_listitem (pcis, i)) != NULL; i++) { libxl_device_pci *pcidev; - d_config->pcidevs = (libxl_device_pci *) realloc(d_config->pcidevs, sizeof (libxl_device_pci) * (d_config->num_pcidevs + 1)); - pcidev = d_config->pcidevs + d_config->num_pcidevs; - libxl_device_pci_init(pcidev); - + pcidev = ARRAY_EXTEND_INIT_NODEVID(d_config->pcidevs, + d_config->num_pcidevs, + libxl_device_pci_init); pcidev->msitranslate = pci_msitranslate; pcidev->power_mgmt = pci_power_mgmt; pcidev->permissive = pci_permissive; @@ -1942,7 +1949,6 @@ skip_vfb: fprintf(stderr, "unable to parse PCI BDF for passthrough\n"); exit(-e); } - d_config->num_pcidevs++; } if (d_config->num_pcidevs && c_info->type == LIBXL_DOMAIN_TYPE_PV) libxl_defbool_set(&b_info->u.pv.e820_host, true); @@ -1954,17 +1960,15 @@ skip_vfb: for (i = 0; (buf = xlu_cfg_get_listitem(dtdevs, i)) != NULL; i++) { libxl_device_dtdev *dtdev; - d_config->dtdevs = xrealloc(d_config->dtdevs, - sizeof (libxl_device_dtdev) * (i + 1)); - dtdev = d_config->dtdevs + d_config->num_dtdevs; - libxl_device_dtdev_init(dtdev); + dtdev = ARRAY_EXTEND_INIT_NODEVID(d_config->dtdevs, + d_config->num_dtdevs, + libxl_device_dtdev_init); dtdev->path = strdup(buf); if (dtdev->path == NULL) { fprintf(stderr, "unable to duplicate string for dtdevs\n"); exit(-1); } - d_config->num_dtdevs++; } } -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |