Convert lib/wb_reqtrans.c to unix calling conventions
authorVolker Lendecke <vl@samba.org>
Wed, 6 May 2009 13:10:00 +0000 (15:10 +0200)
committerVolker Lendecke <vl@samba.org>
Thu, 7 May 2009 20:52:33 +0000 (22:52 +0200)
source3/include/wbc_async.h
source3/lib/wb_reqtrans.c
source3/lib/wbclient.c

index eaec0d11da6d6e1d6c925dcabf241d14b1231d2a..57b0cb83abe5abfa7dc5c8b67d3a494b7da5db57 100644 (file)
@@ -41,24 +41,24 @@ wbcErr tevent_req_simple_recv_wbcerr(struct tevent_req *req);
 struct tevent_req *wb_req_read_send(TALLOC_CTX *mem_ctx,
                                    struct tevent_context *ev,
                                    int fd, size_t max_extra_data);
-wbcErr wb_req_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-                       struct winbindd_request **preq);
+ssize_t wb_req_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                        struct winbindd_request **preq, int *err);
 
 struct tevent_req *wb_req_write_send(TALLOC_CTX *mem_ctx,
                                     struct tevent_context *ev,
                                     struct tevent_queue *queue, int fd,
                                     struct winbindd_request *wb_req);
-wbcErr wb_req_write_recv(struct tevent_req *req);
+ssize_t wb_req_write_recv(struct tevent_req *req, int *err);
 
 struct tevent_req *wb_resp_read_send(TALLOC_CTX *mem_ctx,
                                     struct tevent_context *ev, int fd);
-wbcErr wb_resp_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-                        struct winbindd_response **presp);
+ssize_t wb_resp_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                         struct winbindd_response **presp, int *err);
 
 struct tevent_req *wb_resp_write_send(TALLOC_CTX *mem_ctx,
                                      struct tevent_context *ev,
                                      struct tevent_queue *queue, int fd,
                                      struct winbindd_response *wb_resp);
-wbcErr wb_resp_write_recv(struct tevent_req *req);
+ssize_t wb_resp_write_recv(struct tevent_req *req, int *err);
 
 #endif /*_WBC_ASYNC_H_*/
index b64efecef34802f8d1df50d5767e7d8cb4248b90..d7ec17b58bb918e1b086cfc8c1f8b366260d26ab 100644 (file)
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
 
-wbcErr map_wbc_err_from_errno(int error)
-{
-       switch(error) {
-       case EPERM:
-       case EACCES:
-               return WBC_ERR_AUTH_ERROR;
-       case ENOMEM:
-               return WBC_ERR_NO_MEMORY;
-       case EIO:
-       default:
-               return WBC_ERR_UNKNOWN_FAILURE;
-       }
-}
-
-bool tevent_req_is_wbcerr(struct tevent_req *req, wbcErr *pwbc_err)
-{
-       enum tevent_req_state state;
-       uint64_t error;
-       if (!tevent_req_is_error(req, &state, &error)) {
-               *pwbc_err = WBC_ERR_SUCCESS;
-               return false;
-       }
-
-       switch (state) {
-       case TEVENT_REQ_USER_ERROR:
-               *pwbc_err = error;
-               break;
-       case TEVENT_REQ_TIMED_OUT:
-               *pwbc_err = WBC_ERR_UNKNOWN_FAILURE;
-               break;
-       case TEVENT_REQ_NO_MEMORY:
-               *pwbc_err = WBC_ERR_NO_MEMORY;
-               break;
-       default:
-               *pwbc_err = WBC_ERR_UNKNOWN_FAILURE;
-               break;
-       }
-       return true;
-}
-
-wbcErr tevent_req_simple_recv_wbcerr(struct tevent_req *req)
-{
-       wbcErr wbc_err;
-
-       if (tevent_req_is_wbcerr(req, &wbc_err)) {
-               return wbc_err;
-       }
-
-       return WBC_ERR_SUCCESS;
-}
-
 struct req_read_state {
        struct winbindd_request *wb_req;
        size_t max_extra_data;
+       ssize_t ret;
 };
 
 static ssize_t wb_req_more(uint8_t *buf, size_t buflen, void *private_data);
@@ -139,13 +89,12 @@ static void wb_req_read_done(struct tevent_req *subreq)
        struct req_read_state *state = tevent_req_data(
                req, struct req_read_state);
        int err;
-       ssize_t ret;
        uint8_t *buf;
 
-       ret = read_packet_recv(subreq, state, &buf, &err);
+       state->ret = read_packet_recv(subreq, state, &buf, &err);
        TALLOC_FREE(subreq);
-       if (ret == -1) {
-               tevent_req_error(req, map_wbc_err_from_errno(err));
+       if (state->ret == -1) {
+               tevent_req_error(req, err);
                return;
        }
 
@@ -160,22 +109,22 @@ static void wb_req_read_done(struct tevent_req *subreq)
        tevent_req_done(req);
 }
 
-wbcErr wb_req_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-                       struct winbindd_request **preq)
+ssize_t wb_req_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                        struct winbindd_request **preq, int *err)
 {
        struct req_read_state *state = tevent_req_data(
                req, struct req_read_state);
-       wbcErr wbc_err;
 
-       if (tevent_req_is_wbcerr(req, &wbc_err)) {
-               return wbc_err;
+       if (tevent_req_is_unix_error(req, err)) {
+               return -1;
        }
        *preq = talloc_move(mem_ctx, &state->wb_req);
-       return WBC_ERR_SUCCESS;
+       return state->ret;
 }
 
 struct req_write_state {
        struct iovec iov[2];
+       ssize_t ret;
 };
 
 static void wb_req_write_done(struct tevent_req *subreq);
@@ -215,25 +164,33 @@ static void wb_req_write_done(struct tevent_req *subreq)
 {
        struct tevent_req *req = tevent_req_callback_data(
                subreq, struct tevent_req);
+       struct req_write_state *state = tevent_req_data(
+               req, struct req_write_state);
        int err;
-       ssize_t ret;
 
-       ret = writev_recv(subreq, &err);
+       state->ret = writev_recv(subreq, &err);
        TALLOC_FREE(subreq);
-       if (ret < 0) {
-               tevent_req_error(req, map_wbc_err_from_errno(err));
+       if (state->ret < 0) {
+               tevent_req_error(req, err);
                return;
        }
        tevent_req_done(req);
 }
 
-wbcErr wb_req_write_recv(struct tevent_req *req)
+ssize_t wb_req_write_recv(struct tevent_req *req, int *err)
 {
-       return tevent_req_simple_recv_wbcerr(req);
+       struct req_write_state *state = tevent_req_data(
+               req, struct req_write_state);
+
+       if (tevent_req_is_unix_error(req, err)) {
+               return -1;
+       }
+       return state->ret;
 }
 
 struct resp_read_state {
        struct winbindd_response *wb_resp;
+       ssize_t ret;
 };
 
 static ssize_t wb_resp_more(uint8_t *buf, size_t buflen, void *private_data);
@@ -282,12 +239,11 @@ static void wb_resp_read_done(struct tevent_req *subreq)
                req, struct resp_read_state);
        uint8_t *buf;
        int err;
-       ssize_t ret;
 
-       ret = read_packet_recv(subreq, state, &buf, &err);
+       state->ret = read_packet_recv(subreq, state, &buf, &err);
        TALLOC_FREE(subreq);
-       if (ret == -1) {
-               tevent_req_error(req, map_wbc_err_from_errno(err));
+       if (state->ret == -1) {
+               tevent_req_error(req, err);
                return;
        }
 
@@ -302,22 +258,22 @@ static void wb_resp_read_done(struct tevent_req *subreq)
        tevent_req_done(req);
 }
 
-wbcErr wb_resp_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-                        struct winbindd_response **presp)
+ssize_t wb_resp_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                         struct winbindd_response **presp, int *err)
 {
        struct resp_read_state *state = tevent_req_data(
                req, struct resp_read_state);
-       wbcErr wbc_err;
 
-       if (tevent_req_is_wbcerr(req, &wbc_err)) {
-               return wbc_err;
+       if (tevent_req_is_unix_error(req, err)) {
+               return -1;
        }
        *presp = talloc_move(mem_ctx, &state->wb_resp);
-       return WBC_ERR_SUCCESS;
+       return state->ret;
 }
 
 struct resp_write_state {
        struct iovec iov[2];
+       ssize_t ret;
 };
 
 static void wb_resp_write_done(struct tevent_req *subreq);
@@ -358,19 +314,26 @@ static void wb_resp_write_done(struct tevent_req *subreq)
 {
        struct tevent_req *req = tevent_req_callback_data(
                subreq, struct tevent_req);
+       struct resp_write_state *state = tevent_req_data(
+               req, struct resp_write_state);
        int err;
-       ssize_t ret;
 
-       ret = writev_recv(subreq, &err);
+       state->ret = writev_recv(subreq, &err);
        TALLOC_FREE(subreq);
-       if (ret < 0) {
-               tevent_req_error(req, map_wbc_err_from_errno(err));
+       if (state->ret < 0) {
+               tevent_req_error(req, err);
                return;
        }
        tevent_req_done(req);
 }
 
-wbcErr wb_resp_write_recv(struct tevent_req *req)
+ssize_t wb_resp_write_recv(struct tevent_req *req, int *err)
 {
-       return tevent_req_simple_recv_wbcerr(req);
+       struct resp_write_state *state = tevent_req_data(
+               req, struct resp_write_state);
+
+       if (tevent_req_is_unix_error(req, err)) {
+               return -1;
+       }
+       return state->ret;
 }
index c22e1684541a410fe51f313b91a25a5549b42e05..abe5b50c432d7199674ddc60aad6240450dabe96 100644 (file)
 #include "includes.h"
 #include "wbc_async.h"
 
+wbcErr map_wbc_err_from_errno(int error)
+{
+       switch(error) {
+       case EPERM:
+       case EACCES:
+               return WBC_ERR_AUTH_ERROR;
+       case ENOMEM:
+               return WBC_ERR_NO_MEMORY;
+       case EIO:
+       default:
+               return WBC_ERR_UNKNOWN_FAILURE;
+       }
+}
+
+bool tevent_req_is_wbcerr(struct tevent_req *req, wbcErr *pwbc_err)
+{
+       enum tevent_req_state state;
+       uint64_t error;
+       if (!tevent_req_is_error(req, &state, &error)) {
+               *pwbc_err = WBC_ERR_SUCCESS;
+               return false;
+       }
+
+       switch (state) {
+       case TEVENT_REQ_USER_ERROR:
+               *pwbc_err = error;
+               break;
+       case TEVENT_REQ_TIMED_OUT:
+               *pwbc_err = WBC_ERR_UNKNOWN_FAILURE;
+               break;
+       case TEVENT_REQ_NO_MEMORY:
+               *pwbc_err = WBC_ERR_NO_MEMORY;
+               break;
+       default:
+               *pwbc_err = WBC_ERR_UNKNOWN_FAILURE;
+               break;
+       }
+       return true;
+}
+
+wbcErr tevent_req_simple_recv_wbcerr(struct tevent_req *req)
+{
+       wbcErr wbc_err;
+
+       if (tevent_req_is_wbcerr(req, &wbc_err)) {
+               return wbc_err;
+       }
+
+       return WBC_ERR_SUCCESS;
+}
+
 struct wb_context {
        struct tevent_queue *queue;
        int fd;
@@ -320,12 +371,13 @@ static void wb_int_trans_write_done(struct tevent_req *subreq)
                subreq, struct tevent_req);
        struct wb_int_trans_state *state = tevent_req_data(
                req, struct wb_int_trans_state);
-       wbcErr wbc_err;
+       ssize_t ret;
+       int err;
 
-       wbc_err = wb_req_write_recv(subreq);
+       ret = wb_req_write_recv(subreq, &err);
        TALLOC_FREE(subreq);
-       if (!WBC_ERROR_IS_OK(wbc_err)) {
-               tevent_req_error(req, wbc_err);
+       if (ret == -1) {
+               tevent_req_error(req, map_wbc_err_from_errno(err));
                return;
        }
 
@@ -342,12 +394,13 @@ static void wb_int_trans_read_done(struct tevent_req *subreq)
                subreq, struct tevent_req);
        struct wb_int_trans_state *state = tevent_req_data(
                req, struct wb_int_trans_state);
-       wbcErr wbc_err;
+       ssize_t ret;
+       int err;
 
-       wbc_err = wb_resp_read_recv(subreq, state, &state->wb_resp);
+       ret = wb_resp_read_recv(subreq, state, &state->wb_resp, &err);
        TALLOC_FREE(subreq);
-       if (!WBC_ERROR_IS_OK(wbc_err)) {
-               tevent_req_error(req, wbc_err);
+       if (ret == -1) {
+               tevent_req_error(req, map_wbc_err_from_errno(err));
                return;
        }