Coverage Report

Created: 2025-06-13 06:25

/src/systemd/src/basic/errno-util.h
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2
#pragma once
3
4
#include <string.h>
5
6
#include "forward.h"
7
8
/* strerror(3) says that glibc uses a maximum length of 1024 bytes. */
9
#define ERRNO_BUF_LEN           1024
10
11
/* Note: the lifetime of the compound literal is the immediately surrounding block,
12
 * see C11 §6.5.2.5, and
13
 * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks
14
 *
15
 * Note that we use the GNU variant of strerror_r() here. */
16
#define STRERROR(errnum) strerror_r(ABS(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
17
18
/* A helper to print an error message or message for functions that return 0 on EOF.
19
 * Note that we can't use ({ … }) to define a temporary variable, so errnum is
20
 * evaluated twice. */
21
#define STRERROR_OR_EOF(errnum) ((errnum) != 0 ? STRERROR(errnum) : "Unexpected EOF")
22
23
0
static inline void _reset_errno_(int *saved_errno) {
24
0
        if (*saved_errno < 0) /* Invalidated by UNPROTECT_ERRNO? */
25
0
                return;
26
0
27
0
        errno = *saved_errno;
28
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:_reset_errno_
Unexecuted instantiation: udev-builtin-dissect_image.c:_reset_errno_
Unexecuted instantiation: udev-builtin-net_driver.c:_reset_errno_
Unexecuted instantiation: udev-ctrl.c:_reset_errno_
Unexecuted instantiation: udev-error.c:_reset_errno_
Unexecuted instantiation: udev-format.c:_reset_errno_
Unexecuted instantiation: udev-manager.c:_reset_errno_
Unexecuted instantiation: udev-node.c:_reset_errno_
Unexecuted instantiation: udev-rules.c:_reset_errno_
Unexecuted instantiation: udev-watch.c:_reset_errno_
Unexecuted instantiation: udev-worker.c:_reset_errno_
29
30
#define PROTECT_ERRNO                           \
31
        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
32
33
#define UNPROTECT_ERRNO                         \
34
        do {                                    \
35
                errno = _saved_errno_;          \
36
                _saved_errno_ = -1;             \
37
        } while (false)
38
39
#define LOCAL_ERRNO(value)                      \
40
        PROTECT_ERRNO;                          \
41
        errno = ABS(value)
42
43
#define return_with_errno(r, err)                     \
44
        do {                                          \
45
                errno = ABS(err);                     \
46
                return r;                             \
47
        } while (false)
48
49
0
static inline int negative_errno(void) {
50
        /* This helper should be used to shut up gcc if you know 'errno' is
51
         * negative. Instead of "return -errno;", use "return negative_errno();"
52
         * It will suppress bogus gcc warnings in case it assumes 'errno' might
53
         * be 0 and thus the caller's error-handling might not be triggered. */
54
0
        assert_return(errno > 0, -EINVAL);
55
0
        return -errno;
56
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:negative_errno
Unexecuted instantiation: udev-builtin-dissect_image.c:negative_errno
Unexecuted instantiation: udev-builtin-net_driver.c:negative_errno
Unexecuted instantiation: udev-ctrl.c:negative_errno
Unexecuted instantiation: udev-error.c:negative_errno
Unexecuted instantiation: udev-format.c:negative_errno
Unexecuted instantiation: udev-manager.c:negative_errno
Unexecuted instantiation: udev-node.c:negative_errno
Unexecuted instantiation: udev-rules.c:negative_errno
Unexecuted instantiation: udev-watch.c:negative_errno
Unexecuted instantiation: udev-worker.c:negative_errno
57
58
0
static inline int RET_NERRNO(int ret) {
59
60
        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
61
         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
62
         * returning of negative errno. Usage is like this:
63
         *
64
         *     …
65
         *     r = RET_NERRNO(unlink(t));
66
         *     …
67
         *
68
         * or
69
         *
70
         *     …
71
         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
72
         *     …
73
         */
74
75
0
        if (ret < 0)
76
0
                return negative_errno();
77
78
0
        return ret;
79
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:RET_NERRNO
Unexecuted instantiation: udev-builtin-dissect_image.c:RET_NERRNO
Unexecuted instantiation: udev-builtin-net_driver.c:RET_NERRNO
Unexecuted instantiation: udev-ctrl.c:RET_NERRNO
Unexecuted instantiation: udev-error.c:RET_NERRNO
Unexecuted instantiation: udev-format.c:RET_NERRNO
Unexecuted instantiation: udev-manager.c:RET_NERRNO
Unexecuted instantiation: udev-node.c:RET_NERRNO
Unexecuted instantiation: udev-rules.c:RET_NERRNO
Unexecuted instantiation: udev-watch.c:RET_NERRNO
Unexecuted instantiation: udev-worker.c:RET_NERRNO
80
81
/* Collect possible errors in <acc>, so that the first error can be returned.
82
 * Returns (possibly updated) <acc>. */
83
#define RET_GATHER(acc, err)                    \
84
0
        ({                                      \
85
0
                int *__a = &(acc), __e = (err); \
86
0
                if (*__a >= 0 && __e < 0)       \
87
0
                        *__a = __e;             \
88
0
                *__a;                           \
89
0
        })
90
91
0
static inline int errno_or_else(int fallback) {
92
0
        /* To be used when invoking library calls where errno handling is not defined clearly: we return
93
0
         * errno if it is set, and the specified error otherwise. The idea is that the caller initializes
94
0
         * errno to zero before doing an API call, and then uses this helper to retrieve a somewhat useful
95
0
         * error code */
96
0
        if (errno > 0)
97
0
                return -errno;
98
0
99
0
        return -ABS(fallback);
100
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:errno_or_else
Unexecuted instantiation: udev-builtin-dissect_image.c:errno_or_else
Unexecuted instantiation: udev-builtin-net_driver.c:errno_or_else
Unexecuted instantiation: udev-ctrl.c:errno_or_else
Unexecuted instantiation: udev-error.c:errno_or_else
Unexecuted instantiation: udev-format.c:errno_or_else
Unexecuted instantiation: udev-manager.c:errno_or_else
Unexecuted instantiation: udev-node.c:errno_or_else
Unexecuted instantiation: udev-rules.c:errno_or_else
Unexecuted instantiation: udev-watch.c:errno_or_else
Unexecuted instantiation: udev-worker.c:errno_or_else
101
102
/* abs(3) says: Trying to take the absolute value of the most negative integer is not defined. */
103
#define _DEFINE_ABS_WRAPPER(name)                         \
104
0
        static inline bool ERRNO_IS_##name(intmax_t r) {  \
105
0
                if (r == INTMAX_MIN)                      \
106
0
                        return false;                     \
107
0
                return ERRNO_IS_NEG_##name(-ABS(r));      \
108
0
        }
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-error.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-error.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-error.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-error.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-error.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-error.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-error.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-format.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-format.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-format.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-format.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-format.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-format.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-format.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-manager.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-manager.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-manager.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-node.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-node.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-node.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-node.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-node.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-node.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-node.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-rules.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-rules.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-rules.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-watch.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-watch.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-watch.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_XATTR_ABSENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_DEVICE_ABSENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_TRANSIENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_DISCONNECT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_ACCEPT_AGAIN
Unexecuted instantiation: udev-worker.c:ERRNO_IS_RESOURCE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NOT_SUPPORTED
Unexecuted instantiation: udev-worker.c:ERRNO_IS_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-worker.c:ERRNO_IS_PRIVILEGE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_DISK_SPACE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_XATTR_ABSENT
109
110
/* For send()/recv() or read()/write(). */
111
0
static inline bool ERRNO_IS_NEG_TRANSIENT(intmax_t r) {
112
0
        return IN_SET(r,
113
0
                      -EAGAIN,
114
0
                      -EINTR);
115
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_TRANSIENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_TRANSIENT
116
_DEFINE_ABS_WRAPPER(TRANSIENT);
117
118
/* Hint #1: ENETUNREACH happens if we try to connect to "non-existing" special IP addresses, such as ::5.
119
 *
120
 * Hint #2: The kernel sends e.g., EHOSTUNREACH or ENONET to userspace in some ICMP error cases.  See the
121
 *          icmp_err_convert[] in net/ipv4/icmp.c in the kernel sources.
122
 *
123
 * Hint #3: When asynchronous connect() on TCP fails because the host never acknowledges a single packet,
124
 *          kernel tells us that with ETIMEDOUT, see tcp(7). */
125
0
static inline bool ERRNO_IS_NEG_DISCONNECT(intmax_t r) {
126
0
        return IN_SET(r,
127
0
                      -ECONNABORTED,
128
0
                      -ECONNREFUSED,
129
0
                      -ECONNRESET,
130
0
                      -EHOSTDOWN,
131
0
                      -EHOSTUNREACH,
132
0
                      -ENETDOWN,
133
0
                      -ENETRESET,
134
0
                      -ENETUNREACH,
135
0
                      -ENONET,
136
0
                      -ENOPROTOOPT,
137
0
                      -ENOTCONN,
138
0
                      -EPIPE,
139
0
                      -EPROTO,
140
0
                      -ESHUTDOWN,
141
0
                      -ETIMEDOUT);
142
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_DISCONNECT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_DISCONNECT
143
_DEFINE_ABS_WRAPPER(DISCONNECT);
144
145
/* Transient errors we might get on accept() that we should ignore. As per error handling comment in
146
 * the accept(2) man page. */
147
0
static inline bool ERRNO_IS_NEG_ACCEPT_AGAIN(intmax_t r) {
148
0
        return ERRNO_IS_NEG_DISCONNECT(r) ||
149
0
                ERRNO_IS_NEG_TRANSIENT(r) ||
150
0
                r == -EOPNOTSUPP;
151
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_ACCEPT_AGAIN
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_ACCEPT_AGAIN
152
_DEFINE_ABS_WRAPPER(ACCEPT_AGAIN);
153
154
/* Resource exhaustion, could be our fault or general system trouble */
155
0
static inline bool ERRNO_IS_NEG_RESOURCE(intmax_t r) {
156
0
        return IN_SET(r,
157
0
                      -EMFILE,
158
0
                      -ENFILE,
159
0
                      -ENOMEM);
160
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_RESOURCE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_RESOURCE
161
_DEFINE_ABS_WRAPPER(RESOURCE);
162
163
/* Seven different errors for "operation/system call/socket feature not supported" */
164
0
static inline bool ERRNO_IS_NEG_NOT_SUPPORTED(intmax_t r) {
165
0
        return IN_SET(r,
166
0
                      -EOPNOTSUPP,
167
0
                      -ENOTTY,
168
0
                      -ENOSYS,
169
0
                      -EAFNOSUPPORT,
170
0
                      -EPFNOSUPPORT,
171
0
                      -EPROTONOSUPPORT,
172
0
                      -ESOCKTNOSUPPORT,
173
0
                      -ENOPROTOOPT);
174
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_NOT_SUPPORTED
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_NOT_SUPPORTED
175
_DEFINE_ABS_WRAPPER(NOT_SUPPORTED);
176
177
/* ioctl() with unsupported command/arg might additionally return EINVAL */
178
0
static inline bool ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED(intmax_t r) {
179
0
        return ERRNO_IS_NEG_NOT_SUPPORTED(r) || r == -EINVAL;
180
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_IOCTL_NOT_SUPPORTED
181
_DEFINE_ABS_WRAPPER(IOCTL_NOT_SUPPORTED);
182
183
/* Two different errors for access problems */
184
0
static inline bool ERRNO_IS_NEG_PRIVILEGE(intmax_t r) {
185
0
        return IN_SET(r,
186
0
                      -EACCES,
187
0
                      -EPERM);
188
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_PRIVILEGE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_PRIVILEGE
189
_DEFINE_ABS_WRAPPER(PRIVILEGE);
190
191
/* Three different errors for "not enough disk space" */
192
0
static inline bool ERRNO_IS_NEG_DISK_SPACE(intmax_t r) {
193
0
        return IN_SET(r,
194
0
                      -ENOSPC,
195
0
                      -EDQUOT,
196
0
                      -EFBIG);
197
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_DISK_SPACE
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_DISK_SPACE
198
_DEFINE_ABS_WRAPPER(DISK_SPACE);
199
200
/* Three different errors for "this device does not quite exist" */
201
0
static inline bool ERRNO_IS_NEG_DEVICE_ABSENT(intmax_t r) {
202
0
        return IN_SET(r,
203
0
                      -ENODEV,
204
0
                      -ENXIO,
205
0
                      -ENOENT);
206
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_DEVICE_ABSENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_DEVICE_ABSENT
207
_DEFINE_ABS_WRAPPER(DEVICE_ABSENT);
208
209
/* Quite often we want to handle cases where the backing FS doesn't support extended attributes at all and
210
 * where it simply doesn't have the requested xattr the same way */
211
0
static inline bool ERRNO_IS_NEG_XATTR_ABSENT(intmax_t r) {
212
0
        return r == -ENODATA ||
213
0
                ERRNO_IS_NEG_NOT_SUPPORTED(r);
214
0
}
Unexecuted instantiation: udev-builtin-btrfs.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-builtin-dissect_image.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-builtin-net_driver.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-ctrl.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-error.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-format.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-manager.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-node.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-rules.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-watch.c:ERRNO_IS_NEG_XATTR_ABSENT
Unexecuted instantiation: udev-worker.c:ERRNO_IS_NEG_XATTR_ABSENT
215
_DEFINE_ABS_WRAPPER(XATTR_ABSENT);