s3 async: Fix the build on systems that have ETIMEDOUT but not ETIME
[tprouty/samba.git] / source3 / lib / util_sock.c
index 3ddc4342a74eb8658fae57f60dcdf3dca65b46ac..c46aa2ac49b75c7b43f5fd66416473a894b2853f 100644 (file)
@@ -1036,7 +1036,7 @@ struct async_req *open_socket_out_send(TALLOC_CTX *mem_ctx,
        return result;
 
  post_status:
-       if (!async_post_status(result, ev, status)) {
+       if (!async_post_ntstatus(result, ev, status)) {
                goto fail;
        }
        return result;
@@ -1051,20 +1051,23 @@ static void open_socket_out_connected(struct async_req *subreq)
                subreq->async.priv, struct async_req);
        struct open_socket_out_state *state = talloc_get_type_abort(
                req->private_data, struct open_socket_out_state);
-       NTSTATUS status;
+       int err;
        int sys_errno;
 
-       status = async_connect_recv(subreq, &sys_errno);
+       err = async_connect_recv(subreq, &sys_errno);
        TALLOC_FREE(subreq);
-       if (NT_STATUS_IS_OK(status)) {
+       if (err == 0) {
                async_req_done(req);
                return;
        }
 
-       if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)
-           || (sys_errno == EINPROGRESS)
-           || (sys_errno == EALREADY)
-           || (sys_errno == EAGAIN)) {
+       if (
+#ifdef ETIMEDOUT
+               (sys_errno == ETIMEDOUT) ||
+#endif
+               (sys_errno == EINPROGRESS) ||
+               (sys_errno == EALREADY) ||
+               (sys_errno == EAGAIN)) {
 
                /*
                 * retry
@@ -1082,7 +1085,7 @@ static void open_socket_out_connected(struct async_req *subreq)
                }
                if (!async_req_set_timeout(subreq, state->ev,
                                           timeval_set(0, state->wait_nsec))) {
-                       async_req_error(req, NT_STATUS_NO_MEMORY);
+                       async_req_error(req, ENOMEM);
                        return;
                }
                subreq->async.fn = open_socket_out_connected;
@@ -1098,17 +1101,17 @@ static void open_socket_out_connected(struct async_req *subreq)
 #endif
 
        /* real error */
-       async_req_error(req, map_nt_error_from_unix(sys_errno));
+       async_req_error(req, sys_errno);
 }
 
 NTSTATUS open_socket_out_recv(struct async_req *req, int *pfd)
 {
        struct open_socket_out_state *state = talloc_get_type_abort(
                req->private_data, struct open_socket_out_state);
-       NTSTATUS status;
+       int err;
 
-       if (async_req_is_error(req, &status)) {
-               return status;
+       if (async_req_is_errno(req, &err)) {
+               return map_nt_error_from_unix(err);
        }
        *pfd = state->fd;
        state->fd = -1;
@@ -1183,7 +1186,7 @@ struct async_req *open_socket_out_defer_send(TALLOC_CTX *mem_ctx,
        return result;
 
  post_status:
-       if (!async_post_status(result, ev, status)) {
+       if (!async_post_ntstatus(result, ev, status)) {
                goto fail;
        }
        return result;
@@ -1198,12 +1201,12 @@ static void open_socket_out_defer_waited(struct async_req *subreq)
                subreq->async.priv, struct async_req);
        struct open_socket_out_defer_state *state = talloc_get_type_abort(
                req->private_data, struct open_socket_out_defer_state);
-       NTSTATUS status;
+       bool ret;
 
-       status = async_wait_recv(subreq);
+       ret = async_wait_recv(subreq);
        TALLOC_FREE(subreq);
-       if (!NT_STATUS_IS_OK(status)) {
-               async_req_error(req, status);
+       if (!ret) {
+               async_req_nterror(req, NT_STATUS_INTERNAL_ERROR);
                return;
        }
 
@@ -1227,7 +1230,7 @@ static void open_socket_out_defer_connected(struct async_req *subreq)
        status = open_socket_out_recv(subreq, &state->fd);
        TALLOC_FREE(subreq);
        if (!NT_STATUS_IS_OK(status)) {
-               async_req_error(req, status);
+               async_req_nterror(req, status);
                return;
        }
        async_req_done(req);
@@ -1239,7 +1242,7 @@ NTSTATUS open_socket_out_defer_recv(struct async_req *req, int *pfd)
                req->private_data, struct open_socket_out_defer_state);
        NTSTATUS status;
 
-       if (async_req_is_error(req, &status)) {
+       if (async_req_is_nterror(req, &status)) {
                return status;
        }
        *pfd = state->fd;