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 12117433 : bool tevent_req_is_unix_error(struct tevent_req *req, int *perrno) 28 : { 29 168199 : enum tevent_req_state state; 30 168199 : uint64_t err; 31 : 32 12117433 : if (!tevent_req_is_error(req, &state, &err)) { 33 11931137 : return false; 34 : } 35 18099 : switch (state) { 36 33 : case TEVENT_REQ_TIMED_OUT: 37 33 : *perrno = ETIMEDOUT; 38 33 : break; 39 0 : case TEVENT_REQ_NO_MEMORY: 40 0 : *perrno = ENOMEM; 41 0 : break; 42 18066 : case TEVENT_REQ_USER_ERROR: 43 18066 : *perrno = err; 44 18066 : break; 45 0 : default: 46 0 : *perrno = EINVAL; 47 0 : break; 48 : } 49 18097 : return true; 50 : } 51 : 52 336184 : int tevent_req_simple_recv_unix(struct tevent_req *req) 53 : { 54 336184 : int err = 0; 55 : 56 : /* 57 : * Ignore result of tevent_req_is_unix_error, we're only interested in 58 : * the status 59 : */ 60 336184 : tevent_req_is_unix_error(req, &err); 61 336184 : tevent_req_received(req); 62 336184 : return err; 63 : } 64 : 65 47731 : bool tevent_req_poll_unix(struct tevent_req *req, struct tevent_context *ev, 66 : int *err) 67 : { 68 47731 : bool ret = tevent_req_poll(req, ev); 69 47657 : if (!ret) { 70 0 : *err = errno; 71 : } 72 47657 : return ret; 73 : }