# HG changeset patch
# User Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
# Date 1197540659 -3600
# Node ID 0b30c3a70c3aa076d8aac5a6cf63af06413b056c
# Parent b5847180d00719ff39f2d451d4e79d4369952ad5
[CU] Merge do_ref() and do_assoc()
The two functions do_ref() and do_assoc() run through
the same logic. The only difference are the returned
instances. By configuring the do_assoc() function with
an additional paramter (ref_rslt) to inidcate the type
of the returned instance(s) - either reference(names) or
associator(names) - the two functions can be merged.
Signed-off-by: Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
diff -r b5847180d007 -r 0b30c3a70c3a std_association.c
--- a/std_association.c Fri Dec 07 17:15:07 2007 -0500
+++ b/std_association.c Thu Dec 13 11:10:59 2007 +0100
@@ -222,108 +222,111 @@ std_assoc_get_handler(const struct std_a
return NULL;
}
+static CMPIStatus prepare_ref_return_list(struct std_assoc *handler,
+ struct std_assoc_info *info,
+ const CMPIObjectPath *ref,
+ struct inst_list *list)
+{
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+ struct inst_list tmp_list;
+ int i;
+
+ tmp_list = *list;
+ if (tmp_list.list == NULL)
+ return s;
+
+ inst_list_init(list);
+
+ for (i = 0; i < tmp_list.cur; i++) {
+ CMPIInstance *refinst;
+
+ refinst = handler->make_ref(ref, tmp_list.list[i], info, handler);
+ if (refinst == NULL)
+ continue;
+
+ inst_list_add(list, refinst);
+ }
+
+ inst_list_free(&tmp_list);
+ return s;
+}
+
+static CMPIStatus prepare_assoc_return_list(const CMPIBroker *broker,
+ struct std_assoc_info *info,
+ const CMPIObjectPath *ref,
+ struct inst_list *list)
+{
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+
+ if (list->list == NULL)
+ return s;
+
+ s = filter_results(list,
+ NAMESPACE(ref),
+ info->result_class,
+ broker);
+
+ if (s.rc != CMPI_RC_OK) {
+ CU_DEBUG("filter_results did not return CMPI_RC_OK.");
+ return s;
+ }
+
+ return s;
+}
+
static CMPIStatus do_assoc(struct std_assoc_ctx *ctx,
struct std_assoc_info *info,
const CMPIResult *results,
const CMPIObjectPath *ref,
+ bool ref_rslt,
bool names_only)
{
CMPIStatus s = {CMPI_RC_OK, NULL};
struct inst_list list;
struct std_assoc *handler;
- inst_list_init(&list);
-
- CU_DEBUG("Getting handler...");
+ CU_DEBUG("Getting handler ...");
handler = std_assoc_get_handler(ctx, info, ref);
if (handler == NULL) {
CU_DEBUG("No handler found.");
- goto out;
+ return s;
}
CU_DEBUG("Getting handler succeeded.");
- CU_DEBUG("Calling handler->handler...");
+ inst_list_init(&list);
+
+ CU_DEBUG("Calling handler ...");
s = handler->handler(ref, info, &list);
-
if (s.rc != CMPI_RC_OK) {
CU_DEBUG("Handler did not return CMPI_RC_OK.");
goto out;
- } else {
- CU_DEBUG("Handler returned CMPI_RC_OK.");
- }
-
- if (list.list == NULL) {
- CU_DEBUG("List is empty.");
+ }
+ CU_DEBUG("Handler returned CMPI_RC_OK.");
+
+ /* References and ReferenceNames */
+ if (ref_rslt)
+ s = prepare_ref_return_list(handler,
+ info,
+ ref,
+ &list);
+ /* Associators and AssociatorNames */
+ else
+ s = prepare_assoc_return_list(ctx->brkr,
+ info,
+ ref,
+ &list);
+
+ if (s.rc != CMPI_RC_OK) {
+ CU_DEBUG("Prepare return list did not return CMPI_RC_OK.");
goto out;
}
-
- s = filter_results(&list,
- NAMESPACE(ref),
- info->result_class,
- ctx->brkr);
- if (s.rc != CMPI_RC_OK) {
- CU_DEBUG("filter_results did not return CMPI_RC_OK.");
- goto out;
- }
-
- if (list.list == NULL) {
- CU_DEBUG("List is empty.");
- goto out;
- } else {
- CU_DEBUG("Returned %u instance(s).", list.cur);
- }
+ CU_DEBUG("Returned %u instance(s).", list.cur);
if (names_only)
cu_return_instance_names(results, &list);
else
cu_return_instances(results, &list);
- out:
- inst_list_free(&list);
-
- return s;
-}
-
-static CMPIStatus do_ref(struct std_assoc_ctx *ctx,
- struct std_assoc_info *info,
- const CMPIResult *results,
- const CMPIObjectPath *ref,
- bool names_only)
-{
- CMPIStatus s = {CMPI_RC_OK, NULL};
- struct inst_list list;
- struct std_assoc *handler;
- int i;
-
- inst_list_init(&list);
-
- CU_DEBUG("Getting handler...");
- handler = std_assoc_get_handler(ctx, info, ref);
- if (handler == NULL) {
- CU_DEBUG("No handler found.");
- goto out;
- }
- CU_DEBUG("Getting handler succeeded.");
-
- CU_DEBUG("Calling handler->handler...");
- s = handler->handler(ref, info, &list);
- if ((s.rc != CMPI_RC_OK) || (list.list == NULL))
- goto out;
-
- for (i = 0; i < list.cur; i++) {
- CMPIInstance *refinst;
-
- refinst = handler->make_ref(ref, list.list[i], info, handler);
- if (refinst == NULL)
- continue;
-
- if (names_only)
- cu_return_instance_name(results, refinst);
- else
- CMReturnInstance(results, refinst);
- }
-
- CMSetStatus(&s, CMPI_RC_OK);
out:
inst_list_free(&list);
@@ -359,6 +362,7 @@ CMPIStatus stda_AssociatorNames(CMPIAsso
&info,
results,
reference,
+ false,
true);
}
@@ -386,6 +390,7 @@ CMPIStatus stda_Associators(CMPIAssociat
&info,
results,
reference,
+ false,
false);
}
@@ -406,7 +411,12 @@ CMPIStatus stda_ReferenceNames(CMPIAssoc
self->ft->miName,
};
- return do_ref(self->hdl, &info, results, reference, true);
+ return do_assoc(self->hdl,
+ &info,
+ results,
+ reference,
+ true,
+ true);
}
CMPIStatus stda_References(CMPIAssociationMI *self,
@@ -427,7 +437,12 @@ CMPIStatus stda_References(CMPIAssociati
self->ft->miName,
};
- return do_ref(self->hdl, &info, results, reference, false);
+ return do_assoc(self->hdl,
+ &info,
+ results,
+ reference,
+ true,
+ false);
}
/*