[Libvirt-cim] [PATCH] device_parsing: Small code cleanup

Wayne Xia xiawenc at linux.vnet.ibm.com
Thu Sep 29 06:37:28 UTC 2011


seems fine, if compilation pass, there would be no more impact to
other code for a static function changing.

于 2011-9-29 4:52, Eduardo Lima (Etrunko) 写道:
>   libxkutil/device_parsing.c |  72 ++++++++++++++++++++++++++-------------------
>   1 files changed, 42 insertions(+), 30 deletions(-)
>
>
> # HG changeset patch
> # User Eduardo Lima (Etrunko)<eblima at br.ibm.com>
> # Date 1317238828 10800
> # Node ID 4e1f0b6dc5e512d98b8258c2c68ac5b1f28e83b6
> # Parent  2448b5a111e723902603ed5430aa0f0b1972732d
> device_parsing: Small code cleanup
>
> Use the specific device parsing function as parameter in do_parse() instead
> of checking for the device type in both caller and callee.
>
> Signed-off-by: Eduardo Lima (Etrunko)<eblima at br.ibm.com>
>
> diff --git a/libxkutil/device_parsing.c b/libxkutil/device_parsing.c
> --- a/libxkutil/device_parsing.c
> +++ b/libxkutil/device_parsing.c
> @@ -49,6 +49,9 @@
>
>   #define MAX(a,b) (((a)>(b))?(a):(b))
>
> +/* Device parse function */
> +typedef int (*dev_parse_func_t)(xmlNode *, struct virt_device **);
> +
>   static void cleanup_disk_device(struct disk_device *dev)
>   {
>           free(dev->type);
> @@ -669,32 +672,15 @@
>           return true;
>   }
>
> -static int do_parse(xmlNodeSet *nsv, int type, struct virt_device **l)
> +
> +static int do_parse(xmlNodeSet *nsv, dev_parse_func_t do_real_parse,
> +                    struct virt_device **l)
>   {
>           int devidx;
>           int lstidx = 0;
>           int count = 0;
>           struct virt_device *list = NULL;
>           xmlNode **dev_nodes = NULL;
> -        int (*do_real_parse)(xmlNode *, struct virt_device **) = NULL;
> -
> -        /* point to correct parser function according to type */
> -        if (type == CIM_RES_TYPE_NET)
> -                do_real_parse =&parse_net_device;
> -        else if (type == CIM_RES_TYPE_DISK)
> -                do_real_parse =&parse_disk_device;
> -        else if (type == CIM_RES_TYPE_PROC)
> -                do_real_parse = parse_vcpu_device;
> -        else if (type == CIM_RES_TYPE_EMU)
> -                do_real_parse = parse_emu_device;
> -        else if (type == CIM_RES_TYPE_MEM)
> -                do_real_parse = parse_mem_device;
> -        else if (type == CIM_RES_TYPE_GRAPHICS)
> -                do_real_parse = parse_graphics_device;
> -        else if (type == CIM_RES_TYPE_INPUT)
> -                do_real_parse = parse_input_device;
> -        else
> -                goto out;
>
>           if (nsv == NULL)
>                   goto out;
> @@ -743,29 +729,55 @@
>   {
>           int len = 0;
>           int count = 0;
> +        dev_parse_func_t func = NULL;
>
> -        CU_DEBUG("In parse_deviceso - type is %d", type);
>           xmlDoc *xmldoc;
>           xmlXPathContext *xpathCtx;
>           xmlXPathObject *xpathObj;
>           xmlChar *xpathstr;
>
> -        if (type == CIM_RES_TYPE_NET)
> +        CU_DEBUG("In parse_devices - type is %d", type);
> +
> +        switch (type) {
> +        case CIM_RES_TYPE_NET:
>                   xpathstr = NET_XPATH;
> -        else if (type == CIM_RES_TYPE_DISK)
> +                func =&parse_net_device;
> +                break;
> +
> +        case CIM_RES_TYPE_DISK:
>                   xpathstr = DISK_XPATH;
> -        else if (type == CIM_RES_TYPE_PROC)
> +                func =&parse_disk_device;
> +                break;
> +
> +        case CIM_RES_TYPE_PROC:
>                   xpathstr = VCPU_XPATH;
> -        else if (type == CIM_RES_TYPE_EMU)
> +                func =&parse_vcpu_device;
> +                break;
> +
> +        case CIM_RES_TYPE_EMU:
>                   xpathstr = EMU_XPATH;
> -        else if (type == CIM_RES_TYPE_MEM)
> +                func =&parse_emu_device;
> +                break;
> +
> +        case CIM_RES_TYPE_MEM:
>                   xpathstr = MEM_XPATH;
> -        else if (type == CIM_RES_TYPE_GRAPHICS)
> +                func =&parse_mem_device;
> +                break;
> +
> +        case CIM_RES_TYPE_GRAPHICS:
>                   xpathstr = GRAPHICS_XPATH;
> -        else if (type == CIM_RES_TYPE_INPUT)
> +                func =&parse_graphics_device;
> +                break;
> +
> +        case CIM_RES_TYPE_INPUT:
>                   xpathstr = INPUT_XPATH;
> -        else
> +                func =&parse_input_device;
> +                break;
> +
> +        default:
> +                CU_DEBUG("Unrecognized device type. Returning.");
>                   goto err1;
> +        };
>
>           len = strlen(xml) + 1;
>
> @@ -780,7 +792,7 @@
>                           == NULL)
>                   goto err3;
>
> -        count = do_parse(xpathObj->nodesetval, type, _list);
> +        count = do_parse(xpathObj->nodesetval, func, _list);
>
>           xmlSetGenericErrorFunc(NULL, NULL);
>           xmlXPathFreeObject(xpathObj);
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Best Regards

Wayne Xia
mail:xiawenc at linux.vnet.ibm.com
tel:86-010-82450803




More information about the Libvirt-cim mailing list