Coverage Report

Created: 2025-11-16 06:57

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