[Libvirt-cim] [PATCH] Fix AddResourceSettings() so it returns ResultingResourceSettings[ ] result

Richard Maciel rmaciel at linux.vnet.ibm.com
Mon Nov 30 13:35:59 UTC 2009


+1

On 11/25/2009 04:17 PM, Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert<karupert at us.ibm.com>
> # Date 1259107270 28800
> # Node ID 58b4cf70770e931f7517c5555e8c1bbc72df4bd2
> # Parent  e736e9f7808ee568704572c3e3f6c62ae26f3baf
> Fix AddResourceSettings() so it returns ResultingResourceSettings[ ] result
>
> AddResourceSettings() should be returning ResultingResourceSettings[ ] as an
> output parameter.
>
> Signed-off-by: Kaitlin Rupert<karupert at us.ibm.com>
>
> diff -r e736e9f7808e -r 58b4cf70770e src/Virt_VirtualSystemManagementService.c
> --- a/src/Virt_VirtualSystemManagementService.c	Wed Nov 11 17:20:17 2009 -0800
> +++ b/src/Virt_VirtualSystemManagementService.c	Tue Nov 24 16:01:10 2009 -0800
> @@ -2388,7 +2388,8 @@
>                                               const char *domain,
>                                               CMPIArray *resources,
>                                               const CMPIResult *results,
> -                                            resmod_fn func)
> +                                            resmod_fn func,
> +                                            struct inst_list *list)
>   {
>           int i;
>           virConnectPtr conn = NULL;
> @@ -2454,6 +2455,7 @@
>                   if (s.rc != CMPI_RC_OK)
>                           break;
>
> +                inst_list_add(list, inst);
>           }
>    out:
>           if (s.rc == CMPI_RC_OK)
> @@ -2527,6 +2529,48 @@
>           return s;
>   }
>
> +static CMPIArray *set_result_res(struct inst_list *list,
> +                                 const char *ns)
> +{
> +        CMPIStatus s = {CMPI_RC_OK, NULL};
> +        CMPIObjectPath *op = NULL;
> +        CMPIArray *res = NULL;
> +        int i = 0;
> +
> +        if (list->cur == 0) {
> +                CU_DEBUG("No resources were added or modified");
> +                return res;
> +        }
> +
> +        res = CMNewArray(_BROKER, list->cur, CMPI_ref,&s);
> +        if ((s.rc != CMPI_RC_OK) || (res == NULL)) {
> +                CU_DEBUG("Unable to create results array");
> +                goto out;
> +        }
> +
> +        for (i = 0; list->list[i] != NULL; i++) {
> +                op = CMGetObjectPath(list->list[i], NULL);
> +                if (op == NULL) {
> +                       CU_DEBUG("Unable to RASD reference");
> +                       goto out;
> +                }
> +
> +                CMSetNameSpace(op, ns);
> +
> +                s = CMSetArrayElementAt(res, i, (CMPIValue *)&op, CMPI_ref);
> +                if (s.rc != CMPI_RC_OK) {
> +                       CU_DEBUG("Error setting results array element");
> +                       goto out;
> +                }
> +         }
> +
> + out:
> +         if (s.rc != CMPI_RC_OK)
> +                 res = NULL;
> +
> +         return res;
> +}
> +
>   static CMPIStatus add_resource_settings(CMPIMethodMI *self,
>                                           const CMPIContext *context,
>                                           const CMPIResult *results,
> @@ -2538,6 +2582,10 @@
>           CMPIStatus s;
>           CMPIObjectPath *sys;
>           char *domain = NULL;
> +        CMPIArray *res = NULL;
> +        struct inst_list list;
> +
> +        inst_list_init(&list);
>
>           if (cu_get_array_arg(argsin, "ResourceSettings",&arr) != CMPI_RC_OK) {
>                   cu_statusf(_BROKER,&s,
> @@ -2567,10 +2615,17 @@
>                                         domain,
>                                         arr,
>                                         results,
> -                                      resource_add);
> -
> +                                      resource_add,
> +&list);
> +
>           free(domain);
>
> +        res = set_result_res(&list, NAMESPACE(reference));
> +
> +        inst_list_free(&list);
> +
> +        CMAddArg(argsout, "ResultingResourceSettings",&res, CMPI_refA);
> +
>           return s;
>   }
>
> @@ -2583,6 +2638,10 @@
>   {
>           CMPIArray *arr;
>           CMPIStatus s;
> +        CMPIArray *res = NULL;
> +        struct inst_list list;
> +
> +        inst_list_init(&list);
>
>           if (cu_get_array_arg(argsin, "ResourceSettings",&arr) != CMPI_RC_OK) {
>                   cu_statusf(_BROKER,&s,
> @@ -2591,12 +2650,21 @@
>                   return s;
>           }
>
> -        return _update_resource_settings(context,
> -                                         reference,
> -                                         NULL,
> -                                         arr,
> -                                         results,
> -                                         resource_mod);
> +        s = _update_resource_settings(context,
> +                                      reference,
> +                                      NULL,
> +                                      arr,
> +                                      results,
> +                                      resource_mod,
> +&list);
> +
> +        res = set_result_res(&list, NAMESPACE(reference));
> +
> +        inst_list_free(&list);
> +
> +        CMAddArg(argsout, "ResultingResourceSettings",&res, CMPI_refA);
> +
> +        return s;
>   }
>
>   static CMPIStatus rm_resource_settings(CMPIMethodMI *self,
> @@ -2613,6 +2681,9 @@
>           CMPIArray *arr;
>           CMPIArray *resource_arr;
>           CMPIStatus s;
> +        struct inst_list list;
> +
> +        inst_list_init(&list);
>
>           if (cu_get_array_arg(argsin, "ResourceSettings",&arr) != CMPI_RC_OK) {
>                   cu_statusf(_BROKER,&s,
> @@ -2630,8 +2701,11 @@
>                                         NULL,
>                                         resource_arr,
>                                         results,
> -                                      resource_del);
> +                                      resource_del,
> +&list);
>    out:
> +        inst_list_free(&list);
> +
>           return s;
>   }
>
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list