Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : Wrap unix errno around tevent_req 4 : Copyright (C) Volker Lendecke 2009 5 : 6 : ** NOTE! The following LGPL license applies to the tevent_unix 7 : ** helper library. This does NOT imply that all of Samba is released 8 : ** under the LGPL 9 : 10 : This library is free software; you can redistribute it and/or 11 : modify it under the terms of the GNU Lesser General Public 12 : License as published by the Free Software Foundation; either 13 : version 3 of the License, or (at your option) any later version. 14 : 15 : This library is distributed in the hope that it will be useful, 16 : but WITHOUT ANY WARRANTY; without even the implied warranty of 17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 : Library General Public License for more details. 19 : 20 : You should have received a copy of the GNU Lesser General Public License 21 : along with this program. If not, see <http://www.gnu.org/licenses/>. 22 : */ 23 : 24 : #include "../replace/replace.h" 25 : #include "tevent_unix.h" 26 : 27 3433500 : bool tevent_req_is_unix_error(struct tevent_req *req, int *perrno) 28 : { 29 : enum tevent_req_state state; 30 : uint64_t err; 31 : 32 3433500 : if (!tevent_req_is_error(req, &state, &err)) { 33 3425950 : return false; 34 : } 35 7550 : switch (state) { 36 10 : case TEVENT_REQ_TIMED_OUT: 37 10 : *perrno = ETIMEDOUT; 38 10 : break; 39 0 : case TEVENT_REQ_NO_MEMORY: 40 0 : *perrno = ENOMEM; 41 0 : break; 42 7540 : case TEVENT_REQ_USER_ERROR: 43 7540 : *perrno = err; 44 7540 : break; 45 0 : default: 46 0 : *perrno = EINVAL; 47 0 : break; 48 : } 49 7550 : return true; 50 : } 51 : 52 7534 : int tevent_req_simple_recv_unix(struct tevent_req *req) 53 : { 54 7534 : int err = 0; 55 : 56 : /* 57 : * Ignore result of tevent_req_is_unix_error, we're only interested in 58 : * the status 59 : */ 60 7534 : tevent_req_is_unix_error(req, &err); 61 7534 : tevent_req_received(req); 62 7534 : return err; 63 : } 64 : 65 3537 : bool tevent_req_poll_unix(struct tevent_req *req, struct tevent_context *ev, 66 : int *err) 67 : { 68 3537 : bool ret = tevent_req_poll(req, ev); 69 3516 : if (!ret) { 70 0 : *err = errno; 71 : } 72 3516 : return ret; 73 : }