[Libvirt-cim] [PATCH 1 of 3] Device: rename dom_device to enum_devices and make it configurable

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Fri Mar 7 17:54:46 UTC 2008


> +static CMPIStatus _enum_devices(const CMPIBroker *broker,
> +                                const CMPIObjectPath *reference,
> +                                const virDomainPtr dom,
> +                                const uint16_t type,
> +                                struct inst_list *list)
> +{
> +        CMPIStatus s;
> +
> +        if (type == CIM_RES_TYPE_ALL) {
> +                s = _get_devices(broker,
> +                                 reference,
> +                                 dom,
> +                                 CIM_RES_TYPE_PROC,
> +                                 list);
> +                s = _get_devices(broker,
> +                                 reference,
> +                                 dom,
> +                                 CIM_RES_TYPE_MEM,
> +                                 list);
> +                s = _get_devices(broker,
> +                                 reference,
> +                                 dom,
> +                                 CIM_RES_TYPE_NET,
> +                                 list);
> +                s = _get_devices(broker,
> +                                 reference,
> +                                 dom,
> +                                 CIM_RES_TYPE_DISK,
> +                                 list);
> +        }

Would it be better to have a list of all the resource types, and then 
call _get_devices() in a loop?  This is probably fine as is, and I don't 
suspect we'll add more resource types in the future, so it's probably 
not worth worrying about.

Thoughts?


> +
> +static CMPIStatus return_enum_devices(const CMPIObjectPath *reference,
> +                                      const CMPIResult *results,
> +                                      int names_only)
> +{
> +        CMPIStatus s = {CMPI_RC_OK, NULL};
>          struct inst_list list;
> 
>          if (!provider_is_responsible(_BROKER, reference, &s))
> -                return s;
> +                goto out;
> 
>          inst_list_init(&list);
> 
> -        conn = connect_by_classname(_BROKER, CLASSNAME(reference), &s);
> -        if (conn == NULL)
> -                return s;
> -
> -        if (!dom_list_devices(conn, reference, &list)) {
> -                cu_statusf(_BROKER, &s,
> -                           CMPI_RC_ERR_FAILED,
> -                           "Failed to list domains");
> -                return s;
> -        }
> +        s = enum_devices(_BROKER, reference, NULL, 
> +                         device_type_from_classname(CLASSNAME(reference)),
> +                         &list);
> +        if (s.rc != CMPI_RC_OK)
> +                goto out;
> 
>          if (list.cur == 0)
>                  goto out;

Should inst_list_free(&list); go after the out:?

Even if list.cur == 0, we still probably want to set list->list = NULL 
to be sure.
-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list