
HE> +static CMPIStatus prof_to_prof(const CMPIObjectPath *ref, HE> + struct std_assoc_info *info, HE> + struct inst_list *list) HE> +{ HE> + CMPIStatus s = {CMPI_RC_OK, NULL}; HE> + CMPIInstance *inst = NULL; HE> + virConnectPtr conn = NULL; HE> + struct reg_prof *source; HE> + struct reg_prof *scope; HE> + int i; HE> + HE> + if (!match_hypervisor_prefix(ref, info)) HE> + goto out; HE> + HE> + s = get_profile_by_ref(_BROKER, ref, info->properties, &inst); HE> + if (s.rc != CMPI_RC_OK) HE> + goto out; HE> + HE> + conn = connect_by_classname(_BROKER, CLASSNAME(ref), &s); HE> + if (conn == NULL) HE> + goto out; HE> + HE> + source = get_reg_prof_by_ref(ref); HE> + if (source == NULL) { HE> + cu_statusf(_BROKER, &s, HE> + CMPI_RC_ERR_FAILED, HE> + "Can't find RegisteredProfile instance"); HE> + goto out; HE> + } HE> + HE> + if (source->scoping_profile != NULL) { HE> + s = get_profile(_BROKER, HE> + ref, HE> + info->properties, HE> + CIM_INTEROP_NS, HE> + pfx_from_conn(conn), HE> + source->scoping_profile, HE> + &inst); HE> + if (s.rc != CMPI_RC_OK) HE> + goto out; HE> + inst_list_add(list, inst); HE> + } HE> + HE> + for (i = 0; profiles[i] != NULL; i++) { HE> + if (profiles[i]->scoping_profile == NULL) HE> + continue; HE> + HE> + scope = profiles[i]->scoping_profile; HE> + if (!STREQC(scope->reg_id, source->reg_id)) HE> + continue; HE> + HE> + s = get_profile(_BROKER, HE> + ref, HE> + info->properties, HE> + CIM_INTEROP_NS, HE> + pfx_from_conn(conn), HE> + profiles[i], HE> + &inst); HE> + if (s.rc != CMPI_RC_OK) HE> + goto out; HE> + HE> + inst_list_add(list, inst); HE> + } HE> + HE> + out: HE> + virConnectClose(conn); HE> + HE> + return s; HE> +} This seems a little long to me. Can we break the loop out into a helper function? -- Dan Smith IBM Linux Technology Center Open Hypervisor Team email: danms@us.ibm.com