r17319: make better usage of the composite api
authorStefan Metzmacher <metze@samba.org>
Sun, 30 Jul 2006 17:31:12 +0000 (17:31 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:15:11 +0000 (14:15 -0500)
metze

source/libcli/finddcs.c

index 7df0551b538cd85418fb2cf5c7d8d5d1bc10ffa1..417b33f2778b1c6362709ac5fbfb6442c9052d31 100644 (file)
@@ -66,44 +66,36 @@ struct composite_context *finddcs_send(TALLOC_CTX *mem_ctx,
                                       struct event_context *event_ctx,
                                       struct messaging_context *msg_ctx)
 {
-       struct composite_context *result, *ctx;
+       struct composite_context *c, *creq;
        struct finddcs_state *state;
        struct nbt_name name;
 
-       result = talloc_zero(mem_ctx, struct composite_context);
-       if (result == NULL) goto failed;
-       result->state = COMPOSITE_STATE_IN_PROGRESS;
-       result->async.fn = NULL;
-       result->event_ctx = event_ctx;
+       c = composite_create(mem_ctx, event_ctx);
+       if (c == NULL) return NULL;
 
-       state = talloc(result, struct finddcs_state);
-       if (state == NULL) goto failed;
-       state->ctx = result;
-       result->private_data = state;
+       state = talloc(c, struct finddcs_state);
+       if (composite_nomem(state, c)) return c;
+       c->private_data = state;
+
+       state->ctx = c;
 
        state->domain_name = talloc_strdup(state, domain_name);
-       if (state->domain_name == NULL) goto failed;
-       state->domain_sid = domain_sid;
-       if (domain_sid != NULL) {
-               if (talloc_reference(state, domain_sid) == NULL) {
-                       goto failed;
-               }
+       if (composite_nomem(state->domain_name, c)) return c;
+
+       if (domain_sid) {
+               state->domain_sid = talloc_reference(state, domain_sid);
+               if (composite_nomem(state->domain_sid, c)) return c;
+       } else {
+               state->domain_sid = NULL;
        }
+
        state->msg_ctx = msg_ctx;
 
        make_nbt_name(&name, state->domain_name, name_type);
-       ctx = resolve_name_send(&name, result->event_ctx,
-                               methods);
-
-       if (ctx == NULL) goto failed;
-       ctx->async.fn = finddcs_name_resolved;
-       ctx->async.private_data = state;
-
-       return result;
-
-failed:
-       talloc_free(result);
-       return NULL;
+       creq = resolve_name_send(&name, event_ctx,
+                                methods);
+       composite_continue(c, creq, finddcs_name_resolved, state);
+       return c;
 }
 
 /* Having got an name query answer, fire off a GetDC request, so we