From 17b8d05b624bd87dfe3c996cd10be5a981007bac Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 5 Apr 2009 06:33:17 +0200 Subject: Streamline cli_pull sync wrapper --- source3/libsmb/clireadwrite.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'source3/libsmb') diff --git a/source3/libsmb/clireadwrite.c b/source3/libsmb/clireadwrite.c index a59b26f961..08b9684f63 100644 --- a/source3/libsmb/clireadwrite.c +++ b/source3/libsmb/clireadwrite.c @@ -512,34 +512,43 @@ NTSTATUS cli_pull(struct cli_state *cli, uint16_t fnum, TALLOC_CTX *frame = talloc_stackframe(); struct event_context *ev; struct async_req *req; - NTSTATUS result = NT_STATUS_NO_MEMORY; + NTSTATUS status = NT_STATUS_OK; - if (cli->fd_event != NULL) { + if (cli_has_async_calls(cli)) { /* * Can't use sync call while an async call is in flight */ - return NT_STATUS_INVALID_PARAMETER; + status = NT_STATUS_INVALID_PARAMETER; + goto fail; } ev = event_context_init(frame); if (ev == NULL) { - goto nomem; + status = NT_STATUS_NO_MEMORY; + goto fail; } req = cli_pull_send(frame, ev, cli, fnum, start_offset, size, window_size, sink, priv); if (req == NULL) { - goto nomem; + status = NT_STATUS_NO_MEMORY; + goto fail; } while (req->state < ASYNC_REQ_DONE) { - event_loop_once(ev); + if (event_loop_once(ev) == -1) { + status = map_nt_error_from_unix(errno); + goto fail; + } } - result = cli_pull_recv(req, received); - nomem: + status = cli_pull_recv(req, received); + fail: TALLOC_FREE(frame); - return result; + if (!NT_STATUS_IS_OK(status)) { + cli_set_error(cli, status); + } + return status; } static NTSTATUS cli_read_sink(char *buf, size_t n, void *priv) -- cgit