
HE> # HG changeset patch HE> # User Heidi Eckhart <heidieck@linux.vnet.ibm.com> HE> # Date 1195819371 -3600 HE> # Node ID db20c6206fb6decb484035bec81d7c7f2be75eae HE> # Parent bf54de6af2e210bef57d74cf12e4872f6ba2da4f HE> [RFC] Enhance handling of association's references HE> The source and target classnames of std_assoc are now lists, HE> containing all supported classnames. This approach frees the HE> provider from listing all possible combinations as instances of HE> std_assoc. I'm tentatively okay with this approach. We need to make a decision and go with it so that we can freeze (at least to some extent) the libcmpiutil API and make an official code release. HE> @@ -113,15 +119,30 @@ std_assoc_get_handler(const struct std_a HE> std_assoc_get_handler(const struct std_assoc_ctx *ctx, HE> const CMPIObjectPath *ref) HE> { HE> - struct std_assoc *ptr; HE> - int i; HE> + struct std_assoc *hdl = NULL; HE> + char *source_class; HE> + int i, j; Please don't arbitrarily rename and reorder variables like this. It makes it harder to read the diff and is really unnecessary. HE> for (i = 0; ctx->handlers[i]; i++) { HE> - ptr = ctx->handlers[i]; HE> - HE> - if (CMClassPathIsA(ctx->brkr, ref, ptr->source_class, NULL)) HE> - return ptr; HE> - } HE> + hdl = ctx->handlers[i]; HE> + HE> + for (j = 0; hdl->source_class[j]; j++) { HE> + source_class = hdl->source_class[j]; HE> + HE> + if (CMClassPathIsA(ctx->brkr, HE> + ref, HE> + source_class, HE> + NULL)) HE> + break; HE> + HE> + source_class = NULL; HE> + } HE> + if (source_class) HE> + break; HE> + } HE> + HE> + if (hdl) HE> + return hdl; This double-nested loop really needs to have the inner loop broken out as another function (like match_class()). HE> return NULL; HE> } HE> @@ -144,9 +165,6 @@ static CMPIStatus do_assoc(struct std_as HE> handler = std_assoc_get_handler(ctx, ref); HE> if (handler == NULL) { HE> CU_DEBUG("No handler found."); HE> - cu_statusf(ctx->brkr, &s, HE> - CMPI_RC_ERR_FAILED, HE> - "Unable to handle this association"); HE> goto out; HE> } HE> @@ -243,9 +261,7 @@ static CMPIStatus do_ref(struct std_asso HE> handler = std_assoc_get_handler(ctx, ref); HE> if (handler == NULL) { HE> - cu_statusf(ctx->brkr, &s, HE> - CMPI_RC_ERR_FAILED, HE> - "Unable to handle this association"); HE> + CU_DEBUG("No handler found."); HE> goto out; HE> } Why should we not return error in these cases now? Currently, these signal the case of someone trying to do something like: wbemcli ain -ac Xen_SystemDevice http://...:Xen_MemoryPool (i.e. resolving a particular association with an invalid reference) -- Dan Smith IBM Linux Technology Center Open Hypervisor Team email: danms@us.ibm.com