From 965ebcae7636c44ba40af1eda50cb819ce10b4c8 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 6 Aug 2021 12:11:32 +0200 Subject: [PATCH] rpc_client: Simplify get_complete_frag_send() tevent_req_oom() and tevent_req_nomem() instead of explicit NT_STATUS_NO_MEMORY; do an early return if done. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- source3/rpc_client/cli_pipe.c | 57 +++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index a94620dc52f..2ec672c1339 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -247,7 +247,6 @@ static struct tevent_req *get_complete_frag_send(TALLOC_CTX *mem_ctx, struct tevent_req *req, *subreq; struct get_complete_frag_state *state; size_t received; - NTSTATUS status; req = tevent_req_create(mem_ctx, &state, struct get_complete_frag_state); @@ -262,16 +261,15 @@ static struct tevent_req *get_complete_frag_send(TALLOC_CTX *mem_ctx, received = pdu->length; if (received < RPC_HEADER_LEN) { if (!data_blob_realloc(mem_ctx, pdu, RPC_HEADER_LEN)) { - status = NT_STATUS_NO_MEMORY; - goto post_status; + tevent_req_oom(req); + return tevent_req_post(req, ev); } subreq = rpc_read_send(state, state->ev, state->cli->transport, pdu->data + received, RPC_HEADER_LEN - received); - if (subreq == NULL) { - status = NT_STATUS_NO_MEMORY; - goto post_status; + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); } tevent_req_set_callback(subreq, get_complete_frag_got_header, req); @@ -284,35 +282,30 @@ static struct tevent_req *get_complete_frag_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } - /* - * Ensure we have frag_len bytes of data. - */ - if (received < state->frag_len) { - if (!data_blob_realloc(NULL, pdu, state->frag_len)) { - status = NT_STATUS_NO_MEMORY; - goto post_status; - } - subreq = rpc_read_send(state, state->ev, - state->cli->transport, - pdu->data + received, - state->frag_len - received); - if (subreq == NULL) { - status = NT_STATUS_NO_MEMORY; - goto post_status; - } - tevent_req_set_callback(subreq, get_complete_frag_got_rest, - req); - return req; + if (received >= state->frag_len) { + /* + * Got the whole fragment + */ + tevent_req_done(req); + return tevent_req_post(req, ev); } - status = NT_STATUS_OK; - post_status: - if (NT_STATUS_IS_OK(status)) { - tevent_req_done(req); - } else { - tevent_req_nterror(req, status); + if (!data_blob_realloc(NULL, pdu, state->frag_len)) { + tevent_req_oom(req); + return tevent_req_post(req, ev); } - return tevent_req_post(req, ev); + + subreq = rpc_read_send( + state, + state->ev, + state->cli->transport, + pdu->data + received, + state->frag_len - received); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, get_complete_frag_got_rest, req); + return req; } static void get_complete_frag_got_header(struct tevent_req *subreq) -- 2.11.4.GIT