tree-wide: use ERRNO_NAME almost everywhere

We had errno_to_name() which works for "known" errnos, and returns NULL for
unknown ones, and then ERRNO_NAME which always returns an answer, possibly just
a number as a string, but requires a helper buffer.

It is possible for the kernel to add a new errno. We recently learned that some
architectures define custom errno names. Or for some function to unexpectedly
return a bogus errno value. In almost all cases it's better to print that value
rather than "n/a" or "(null)". So let's use ERRNO_NAME is most error handling
code. Noteably, our code wasn't very good in handling the potential NULL, so
in various places we could print "(null)". Since this is supposed to be used
most of the time, let's shorten the names to ERRNO_NAME/errno_name.

There are a few places where we don't want to use the fallback path, in
particular for D-Bus error names or when saving the error name. Let's rename
errno_to_name() to errno_name_no_fallback() to make the distinction clearer.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2025-07-29 18:05:20 +02:00
parent 225450d043
commit 858cb6e49e
22 changed files with 216 additions and 215 deletions
+5 -5
View File
@@ -25,8 +25,8 @@ int errno_from_name(const char *name) {
}
#if HAVE_STRERRORNAME_NP
const char* errno_to_name(int id) {
if (id == 0) /* To stay in line with our own impl */
const char* errno_name_no_fallback(int id) {
if (id == 0) /* To stay in line with our implementation below. */
return NULL;
return strerrorname_np(ABS(id));
@@ -34,7 +34,7 @@ const char* errno_to_name(int id) {
#else
# include "errno-to-name.inc"
const char* errno_to_name(int id) {
const char* errno_name_no_fallback(int id) {
if (id < 0)
id = -id;
@@ -45,8 +45,8 @@ const char* errno_to_name(int id) {
}
#endif
const char* errno_name_full(int id, char buf[static ERRNO_NAME_BUF_LEN]) {
const char *a = errno_to_name(id);
const char* errno_name(int id, char buf[static ERRNO_NAME_BUF_LEN]) {
const char *a = errno_name_no_fallback(id);
if (a)
return a;
snprintf(buf, ERRNO_NAME_BUF_LEN, "%d", abs(id));
+3 -3
View File
@@ -3,7 +3,7 @@
#include "forward.h"
const char* errno_to_name(int id) _const_;
const char* errno_name_no_fallback(int id) _const_;
int errno_from_name(const char *name) _pure_;
static inline bool errno_is_valid(int n) {
@@ -12,7 +12,7 @@ static inline bool errno_is_valid(int n) {
#define ERRNO_NAME_BUF_LEN DECIMAL_STR_MAX(int)
/* Like errno_name, but always returns a string. */
const char* errno_name_full(int id, char buf[static ERRNO_NAME_BUF_LEN]);
const char* errno_name(int id, char buf[static ERRNO_NAME_BUF_LEN]);
/* A helper to print the errno "name" or number if name is not defined. */
#define ERRNO_NAME_FULL(errnum) errno_name_full(errnum, (char[ERRNO_NAME_BUF_LEN]){})
#define ERRNO_NAME(errnum) errno_name(errnum, (char[ERRNO_NAME_BUF_LEN]){})
+2 -2
View File
@@ -1460,8 +1460,8 @@ int socket_load_service_unit(Socket *s, int cfd, Unit **ret) {
/* ENOTCONN is legitimate if TCP RST was received. Other socket families might return
* different errors. This connection is over, but the socket unit lives on. */
return log_unit_debug_errno(UNIT(s), r,
"Got %s on incoming socket, assuming aborted connection attempt, ignoring.",
errno_to_name(r));
"Got error %s on incoming socket, assuming aborted connection attempt, ignoring.",
ERRNO_NAME(r));
if (r < 0)
return r;
}
+1 -1
View File
@@ -1159,7 +1159,7 @@ static int home_on_worker_process(sd_event_source *s, const siginfo_t *si, void
} else if (si->si_status != EXIT_SUCCESS) {
/* If we received an error code via sd_notify(), use it */
if (h->worker_error_code != 0)
ret = log_debug_errno(h->worker_error_code, "Worker reported error code %s.", errno_to_name(h->worker_error_code));
ret = log_debug_errno(h->worker_error_code, "Worker reported error code %s.", ERRNO_NAME(h->worker_error_code));
else
ret = log_debug_errno(SYNTHETIC_ERRNO(EPROTO), "Worker exited with exit code %i.", si->si_status);
} else
+5 -1
View File
@@ -168,7 +168,11 @@ static int errno_to_bus_error_name_new(int error, char **ret) {
if (error < 0)
error = -error;
name = errno_to_name(error);
/* D-Bus names must not start with a digit. Thus, an name like System.Error.500 would not be legal.
* Let's just return 0 if an unknown errno is encountered, which will cause the caller to fall back
* to BUS_ERROR_FAILED.
*/
name = errno_name_no_fallback(error);
if (!name)
return 0;
+1 -1
View File
@@ -139,7 +139,7 @@ static int dump_mapping_table(void) {
continue;
}
printf("%s -> %i/%s\n", strna(m->name), m->code, strna(errno_to_name(m->code)));
printf("%s -> %i/%s\n", strna(m->name), m->code, ERRNO_NAME(m->code));
m++;
}
printf("---------------------------\n");
+1 -3
View File
@@ -36,9 +36,7 @@ static char* format_uids(char **buf, uid_t* uids, int count) {
return *buf;
}
static const char *e(int r) {
return r == 0 ? "OK" : errno_to_name(r);
}
#define e(r) (r == 0 ? "OK" : ERRNO_NAME(r))
TEST(login) {
_cleanup_close_pair_ int pair[2] = EBADF_PAIR;
+1 -1
View File
@@ -2699,7 +2699,7 @@ _public_ int sd_varlink_error_errno(sd_varlink *v, int error) {
* open, even to foreign systems. */
error = abs(error);
const char *name = errno_to_name(error);
const char *name = errno_name_no_fallback(error);
return sd_varlink_errorbo(
v,
+3 -3
View File
@@ -3146,9 +3146,9 @@ static void monitor_query_dump(sd_json_variant *v) {
streq_ptr(p.state, "success") ? ansi_highlight_green() : ansi_highlight_red(),
glyph(GLYPH_ARROW_LEFT),
ansi_normal(),
strna(streq_ptr(p.state, "errno") ? errno_to_name(p.error) :
streq_ptr(p.state, "rcode-failure") ? dns_rcode_to_string(p.rcode) :
p.state));
streq_ptr(p.state, "errno") ? ERRNO_NAME(p.error) :
streq_ptr(p.state, "rcode-failure") ? strna(dns_rcode_to_string(p.rcode)) :
strna(p.state));
if (!isempty(p.result))
printf(": %s", p.result);
+1 -7
View File
@@ -406,7 +406,6 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
DnsQueryCandidate *c;
DnsZoneItem *z;
DnsTransaction *d;
const char *st;
char key_str[DNS_RESOURCE_KEY_STRING_MAX];
assert(t);
@@ -430,11 +429,6 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
* should hence not attempt to access the query or transaction
* after calling this function. */
if (state == DNS_TRANSACTION_ERRNO)
st = errno_to_name(t->answer_errno);
else
st = dns_transaction_state_to_string(state);
log_debug("%s transaction %" PRIu16 " for <%s> on scope %s on %s/%s now complete with <%s> from %s (%s; %s).",
t->bypass ? "Bypass" : "Regular",
t->id,
@@ -442,7 +436,7 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
dns_protocol_to_string(t->scope->protocol),
t->scope->link ? t->scope->link->ifname : "*",
af_to_name_short(t->scope->family),
st,
state == DNS_TRANSACTION_ERRNO ? ERRNO_NAME(t->answer_errno) : dns_transaction_state_to_string(state),
t->answer_source < 0 ? "none" : dns_transaction_source_to_string(t->answer_source),
FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) ? "not validated" :
(FLAGS_SET(t->answer_query_flags, SD_RESOLVED_AUTHENTICATED) ? "authenticated" : "unsigned"),
+1 -1
View File
@@ -2541,5 +2541,5 @@ int seccomp_parse_errno_or_action(const char *p) {
const char* seccomp_errno_or_action_to_string(int num) {
if (num == SECCOMP_ERROR_NUMBER_KILL)
return "kill";
return errno_to_name(num);
return errno_name_no_fallback(num);
}
+124 -124
View File
@@ -174,28 +174,28 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
#ifdef __COVERITY__
# define ASSERT_OK(expr) __coverity_check__((expr) >= 0)
#else
# define ASSERT_OK(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME_FULL(_result)); \
# define ASSERT_OK(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME(_result)); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_OK_OR(expr, ...) \
({ \
typeof(expr) _result = (expr); \
__coverity_check__(_result >= 0 || IN_SET(_result, 0, __VA_ARGS__) \
# define ASSERT_OK_OR(expr, ...) \
({ \
typeof(expr) _result = (expr); \
__coverity_check__(_result >= 0 || IN_SET(_result, 0, __VA_ARGS__) \
})
#else
# define ASSERT_OK_OR(expr, ...) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0 && !IN_SET(_result, 0, __VA_ARGS__)) \
log_test_failed("\"%s\" failed with unexpected error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME_FULL(_result)); \
# define ASSERT_OK_OR(expr, ...) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0 && !IN_SET(_result, 0, __VA_ARGS__)) \
log_test_failed("\"%s\" failed with unexpected error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME(_result)); \
})
#endif
@@ -203,45 +203,45 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
#ifdef __COVERITY__
# define ASSERT_OK_POSITIVE(expr) __coverity_check__((expr) > 0)
#else
# define ASSERT_OK_POSITIVE(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME_FULL(_result)); \
if (_result == 0) \
log_test_failed("Expected \"%s\" to be positive, but it is zero.", #expr); \
# define ASSERT_OK_POSITIVE(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME(_result)); \
if (_result == 0) \
log_test_failed("Expected \"%s\" to be positive, but it is zero.", #expr); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_OK_ZERO(expr) __coverity_check__((expr) == 0)
#else
# define ASSERT_OK_ZERO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME_FULL(_result)); \
if (_result != 0) \
log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".", \
#expr, (intmax_t) _result); \
# define ASSERT_OK_ZERO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr, (intmax_t) _result, ERRNO_NAME(_result)); \
if (_result != 0) \
log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".", \
#expr, (intmax_t) _result); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_OK_EQ(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
# define ASSERT_OK_EQ(expr1, expr2) \
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
if (_expr1 < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr1, (intmax_t) _expr1, ERRNO_NAME_FULL(_expr1)); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", got %"PRIiMAX" != %"PRIiMAX, \
#expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2); \
# define ASSERT_OK_EQ(expr1, expr2) \
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
if (_expr1 < 0) \
log_test_failed("Expected \"%s\" to succeed, but got error: %"PRIiMAX"/%s", \
#expr1, (intmax_t) _expr1, ERRNO_NAME(_expr1)); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", got %"PRIiMAX" != %"PRIiMAX, \
#expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2); \
})
#endif
@@ -249,153 +249,153 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
#ifdef __COVERITY__
# define ASSERT_OK_ERRNO(expr) __coverity_check__((expr) >= 0)
#else
# define ASSERT_OK_ERRNO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr, errno, ERRNO_NAME_FULL(errno)); \
# define ASSERT_OK_ERRNO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr, errno, ERRNO_NAME(errno)); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_OK_ZERO_ERRNO(expr) __coverity_check__((expr) == 0)
#else
# define ASSERT_OK_ZERO_ERRNO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr, errno, ERRNO_NAME_FULL(errno)); \
if (_result != 0) \
log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".", \
#expr, (intmax_t) _result); \
# define ASSERT_OK_ZERO_ERRNO(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr, errno, ERRNO_NAME(errno)); \
if (_result != 0) \
log_test_failed("Expected \"%s\" to be zero, but it is %"PRIiMAX".", \
#expr, (intmax_t) _result); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_OK_EQ_ERRNO(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
# define ASSERT_OK_EQ_ERRNO(expr1, expr2) \
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
if (_expr1 < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr1, errno, ERRNO_NAME_FULL(errno)); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", but %"PRIiMAX" != %"PRIiMAX, \
#expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2); \
# define ASSERT_OK_EQ_ERRNO(expr1, expr2) \
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
if (_expr1 < 0) \
log_test_failed("Expected \"%s\" to succeed, but got errno: %d/%s", \
#expr1, errno, ERRNO_NAME(errno)); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", but %"PRIiMAX" != %"PRIiMAX, \
#expr1, #expr2, (intmax_t) _expr1, (intmax_t) _expr2); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_FAIL(expr) __coverity_check__((expr) < 0)
#else
# define ASSERT_FAIL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result >= 0) \
log_test_failed("Expected \"%s\" to fail, but it succeeded.", #expr); \
# define ASSERT_FAIL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result >= 0) \
log_test_failed("Expected \"%s\" to fail, but it succeeded.", #expr); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_ERROR(expr1, expr2) __coverity_check__((expr1) == -(expr2))
#else
# define ASSERT_ERROR(expr1, expr2) \
({ \
int _expr1 = (expr1); \
int _expr2 = (expr2); \
if (_expr1 >= 0) \
log_test_failed("Expected \"%s\" to fail with error %d/%s, but it succeeded", \
#expr1, -_expr2, ERRNO_NAME_FULL(_expr2)); \
else if (-_expr1 != _expr2) \
log_test_failed("Expected \"%s\" to fail with error %d/%s, but got %d/%s", \
#expr1, -_expr2, ERRNO_NAME_FULL(_expr2), _expr1, ERRNO_NAME_FULL(_expr1)); \
# define ASSERT_ERROR(expr1, expr2) \
({ \
int _expr1 = (expr1); \
int _expr2 = (expr2); \
if (_expr1 >= 0) \
log_test_failed("Expected \"%s\" to fail with error %d/%s, but it succeeded", \
#expr1, -_expr2, ERRNO_NAME(_expr2)); \
else if (-_expr1 != _expr2) \
log_test_failed("Expected \"%s\" to fail with error %d/%s, but got %d/%s", \
#expr1, -_expr2, ERRNO_NAME(_expr2), _expr1, ERRNO_NAME(_expr1)); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_ERROR_ERRNO(expr1, expr2) __coverity_check__((expr1) < 0 && errno == (expr2))
#else
# define ASSERT_ERROR_ERRNO(expr1, expr2) \
({ \
int _expr1 = (expr1); \
int _expr2 = (expr2); \
if (_expr1 >= 0) \
log_test_failed("Expected \"%s\" to fail with errno %d/%s, but it succeeded", \
#expr1, _expr2, ERRNO_NAME_FULL(_expr2)); \
else if (errno != _expr2) \
log_test_failed("Expected \"%s\" to fail with errno %d/%s, but got %d/%s", \
#expr1, _expr2, ERRNO_NAME_FULL(_expr2), errno, ERRNO_NAME_FULL(errno)); \
# define ASSERT_ERROR_ERRNO(expr1, expr2) \
({ \
int _expr1 = (expr1); \
int _expr2 = (expr2); \
if (_expr1 >= 0) \
log_test_failed("Expected \"%s\" to fail with errno %d/%s, but it succeeded", \
#expr1, _expr2, ERRNO_NAME(_expr2)); \
else if (errno != _expr2) \
log_test_failed("Expected \"%s\" to fail with errno %d/%s, but got %d/%s", \
#expr1, _expr2, ERRNO_NAME(_expr2), errno, ERRNO_NAME(errno)); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_TRUE(expr) __coverity_check__(!!(expr))
#else
# define ASSERT_TRUE(expr) \
({ \
if (!(expr)) \
log_test_failed("Expected \"%s\" to be true", #expr); \
# define ASSERT_TRUE(expr) \
({ \
if (!(expr)) \
log_test_failed("Expected \"%s\" to be true", #expr); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_FALSE(expr) __coverity_check__(!(expr))
#else
# define ASSERT_FALSE(expr) \
({ \
if ((expr)) \
log_test_failed("Expected \"%s\" to be false", #expr); \
# define ASSERT_FALSE(expr) \
({ \
if ((expr)) \
log_test_failed("Expected \"%s\" to be false", #expr); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_NULL(expr) __coverity_check__((expr) == NULL)
#else
# define ASSERT_NULL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result != NULL) \
log_test_failed("Expected \"%s\" to be NULL, got \"%p\" != NULL", #expr, _result); \
# define ASSERT_NULL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result != NULL) \
log_test_failed("Expected \"%s\" to be NULL, got \"%p\" != NULL", #expr, _result); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_NOT_NULL(expr) __coverity_check__((expr) != NULL)
#else
# define ASSERT_NOT_NULL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result == NULL) \
log_test_failed("Expected \"%s\" to be not NULL", #expr); \
_result; \
# define ASSERT_NOT_NULL(expr) \
({ \
typeof(expr) _result = (expr); \
if (_result == NULL) \
log_test_failed("Expected \"%s\" to be not NULL", #expr); \
_result; \
})
#endif
#ifdef __COVERITY__
# define ASSERT_STREQ(expr1, expr2) __coverity_check__(streq_ptr((expr1), (expr2)))
#else
# define ASSERT_STREQ(expr1, expr2) \
({ \
const char *_expr1 = (expr1), *_expr2 = (expr2); \
if (!streq_ptr(_expr1, _expr2)) \
log_test_failed("Expected \"%s == %s\", got \"%s != %s\"", \
#expr1, #expr2, strnull(_expr1), strnull(_expr2)); \
# define ASSERT_STREQ(expr1, expr2) \
({ \
const char *_expr1 = (expr1), *_expr2 = (expr2); \
if (!streq_ptr(_expr1, _expr2)) \
log_test_failed("Expected \"%s == %s\", got \"%s != %s\"", \
#expr1, #expr2, strnull(_expr1), strnull(_expr2)); \
})
#endif
#ifdef __COVERITY__
# define ASSERT_PTR_EQ(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
# define ASSERT_PTR_EQ(expr1, expr2) \
({ \
const void *_expr1 = (expr1), *_expr2 = (expr2); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", got \"0x%p != 0x%p\"", \
#expr1, #expr2, _expr1, _expr2); \
# define ASSERT_PTR_EQ(expr1, expr2) \
({ \
const void *_expr1 = (expr1), *_expr2 = (expr2); \
if (_expr1 != _expr2) \
log_test_failed("Expected \"%s == %s\", got \"0x%p != 0x%p\"", \
#expr1, #expr2, _expr1, _expr2); \
})
#endif
+18 -18
View File
@@ -40,12 +40,12 @@ static void test_policy_closed(const char *cgroup_path, BPFProgram **installed_p
_cleanup_close_ int fd = -EBADF, fd2 = -EBADF;
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd < 0 && errno == EPERM;
/* We ignore errors other than EPERM, e.g. ENOENT or ENXIO */
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 < 0 && errno == EPERM;
}
assert_se(wrong == 0);
@@ -78,11 +78,11 @@ static void test_policy_strict(const char *cgroup_path, BPFProgram **installed_p
const char *s = "/dev/null";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd < 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 < 0;
}
@@ -91,11 +91,11 @@ static void test_policy_strict(const char *cgroup_path, BPFProgram **installed_p
const char *s = "/dev/random";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd < 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 >= 0;
}
@@ -104,11 +104,11 @@ static void test_policy_strict(const char *cgroup_path, BPFProgram **installed_p
const char *s = "/dev/zero";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd >= 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 < 0;
}
@@ -117,11 +117,11 @@ static void test_policy_strict(const char *cgroup_path, BPFProgram **installed_p
const char *s = "/dev/full";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd >= 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 >= 0;
}
@@ -150,11 +150,11 @@ static void test_policy_allow_list_major(const char *pattern, const char *cgroup
const char *s = "/dev/null";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd < 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 < 0;
}
@@ -163,11 +163,11 @@ static void test_policy_allow_list_major(const char *pattern, const char *cgroup
const char *s = "/dev/full";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd < 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 < 0;
}
@@ -176,11 +176,11 @@ static void test_policy_allow_list_major(const char *pattern, const char *cgroup
const char *s = "/dev/tty";
fd = open(s, O_CLOEXEC|O_RDONLY|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd >= 0;
fd2 = open(s, O_CLOEXEC|O_WRONLY|O_NOCTTY);
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"w\") = %d/%s", s, fd2, fd2 < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd2 >= 0;
}
@@ -208,7 +208,7 @@ static void test_policy_allow_list_major_star(char type, const char *cgroup_path
const char *s = "/dev/null";
fd = open(s, O_CLOEXEC|O_RDWR|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
if (type == 'c')
wrong += fd < 0;
else
@@ -241,7 +241,7 @@ static void test_policy_empty(bool add_mismatched, const char *cgroup_path, BPFP
const char *s = "/dev/null";
fd = open(s, O_CLOEXEC|O_RDWR|O_NOCTTY);
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? errno_to_name(errno) : "-");
log_debug("open(%s, \"r\") = %d/%s", s, fd, fd < 0 ? ERRNO_NAME(errno) : "-");
wrong += fd >= 0;
}
+1 -1
View File
@@ -32,7 +32,7 @@ static void test_transient_settings_one(UnitType type, const char* const* lines)
}
r = bus_append_unit_property_assignment(m, type, t);
log_debug("%s → %d/%s", t, r, r < 0 ? ERRNO_NAME_FULL(r) : yes_no(r));
log_debug("%s → %d/%s", t, r, r < 0 ? ERRNO_NAME(r) : yes_no(r));
ASSERT_EQ(r, expect);
}
}
+25 -20
View File
@@ -5,49 +5,54 @@
#include "errno-to-name.inc"
TEST(errno_list) {
TEST(errno_name_no_fallback) {
ASSERT_NULL(errno_names[0]);
ASSERT_NULL(errno_to_name(0));
ASSERT_NULL(errno_name_no_fallback(0));
for (size_t i = 0; i < ELEMENTSOF(errno_names); i++) {
for (size_t i = 0; i < ELEMENTSOF(errno_names); i++)
if (errno_names[i]) {
ASSERT_STREQ(errno_to_name(i), errno_names[i]);
const char *mapped = errno_name_no_fallback(i);
if (mapped)
/* glibc might not know some errno names.
* This is not an error. */
ASSERT_STREQ(mapped, errno_names[i]);
assert_se(errno_from_name(errno_names[i]) == (int) i);
}
}
#ifdef ECANCELLED
/* ECANCELLED is an alias of ECANCELED. */
ASSERT_STREQ(errno_to_name(ECANCELLED), "ECANCELED");
ASSERT_STREQ(errno_name_no_fallback(ECANCELLED), "ECANCELED");
#endif
ASSERT_STREQ(errno_to_name(ECANCELED), "ECANCELED");
ASSERT_STREQ(errno_name_no_fallback(ECANCELED), "ECANCELED");
#ifdef EREFUSED
/* EREFUSED is an alias of ECONNREFUSED. */
ASSERT_STREQ(errno_to_name(EREFUSED), "ECONNREFUSED");
ASSERT_STREQ(errno_name_no_fallback(EREFUSED), "ECONNREFUSED");
#endif
ASSERT_STREQ(errno_to_name(ECONNREFUSED), "ECONNREFUSED");
ASSERT_STREQ(errno_name_no_fallback(ECONNREFUSED), "ECONNREFUSED");
}
TEST(errno_name_full) {
char buf[ERRNO_NAME_BUF_LEN];
ASSERT_STREQ(errno_name_full(0, buf), "0");
ASSERT_STREQ(errno_name_full(EPERM, buf), "EPERM");
ASSERT_STREQ(errno_name_full(ENOENT, buf), "ENOENT");
ASSERT_STREQ(errno_name_full(200, buf), "200");
ASSERT_STREQ(errno_name_full(-200, buf), "200");
ASSERT_STREQ(errno_name(0, buf), "0");
ASSERT_STREQ(errno_name(EPERM, buf), "EPERM");
ASSERT_STREQ(errno_name(ENOENT, buf), "ENOENT");
ASSERT_STREQ(errno_name(200, buf), "200");
ASSERT_STREQ(errno_name(-200, buf), "200");
}
TEST(ERRNO_NAME_FULL) {
ASSERT_STREQ(ERRNO_NAME_FULL(0), "0");
ASSERT_STREQ(ERRNO_NAME_FULL(EPERM), "EPERM");
ASSERT_STREQ(ERRNO_NAME_FULL(ENOENT), "ENOENT");
ASSERT_STREQ(ERRNO_NAME_FULL(200), "200");
ASSERT_STREQ(ERRNO_NAME_FULL(-200), "200");
ASSERT_STREQ(ERRNO_NAME(0), "0");
ASSERT_STREQ(ERRNO_NAME(EPERM), "EPERM");
ASSERT_STREQ(ERRNO_NAME(ENOENT), "ENOENT");
ASSERT_STREQ(ERRNO_NAME(200), "200");
ASSERT_STREQ(ERRNO_NAME(-200), "200");
int x = 0;
ASSERT_STREQ(ERRNO_NAME_FULL(++x), "EPERM"); /* Confirm that eval happens just once. */
ASSERT_STREQ(ERRNO_NAME(++x), "EPERM"); /* Confirm that eval happens just once. */
ASSERT_EQ(x, 1);
}
+7 -7
View File
@@ -115,7 +115,7 @@ static void test_gethostbyname4_r(void *handle, const char *module, const char *
fname, name,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
pat ? (uintptr_t) pat - (uintptr_t) buffer : 0,
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2),
ttl);
n = print_gaih_addrtuples(pat);
@@ -124,7 +124,7 @@ static void test_gethostbyname4_r(void *handle, const char *module, const char *
fname, name,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
pat,
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2));
n = 0;
}
@@ -175,7 +175,7 @@ static void test_gethostbyname3_r(void *handle, const char *module, const char *
log_info("%s(\"%s\", %s) → status=%s%-20serrno=%d/%s h_errno=%d/%s ttl=%"PRIi32,
fname, name, af_to_string(af, family_name, sizeof family_name),
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2),
ttl);
if (status == NSS_STATUS_SUCCESS)
@@ -204,7 +204,7 @@ static void test_gethostbyname2_r(void *handle, const char *module, const char *
log_info("%s(\"%s\", %s) → status=%s%-20serrno=%d/%s h_errno=%d/%s",
fname, name, af_to_string(af, family_name, sizeof family_name),
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2));
if (status == NSS_STATUS_SUCCESS)
print_struct_hostent(&host, NULL);
@@ -231,7 +231,7 @@ static void test_gethostbyname_r(void *handle, const char *module, const char *n
log_info("%s(\"%s\") → status=%s%-20serrno=%d/%s h_errno=%d/%s",
fname, name,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2));
if (status == NSS_STATUS_SUCCESS)
print_struct_hostent(&host, NULL);
@@ -268,7 +268,7 @@ static void test_gethostbyaddr2_r(void *handle,
log_info("%s(\"%s\") → status=%s%-20serrno=%d/%s h_errno=%d/%s ttl=%"PRIi32,
fname, addr_pretty,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2),
ttl);
if (status == NSS_STATUS_SUCCESS)
@@ -305,7 +305,7 @@ static void test_gethostbyaddr_r(void *handle,
log_info("%s(\"%s\") → status=%s%-20serrno=%d/%s h_errno=%d/%s",
fname, addr_pretty,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---",
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---",
errno2, hstrerror(errno2));
if (status == NSS_STATUS_SUCCESS)
print_struct_hostent(&host, NULL);
+4 -4
View File
@@ -61,7 +61,7 @@ static void test_getpwnam_r(void *handle, const char *module, const char *name)
log_info("%s(\"%s\") → status=%s%-20serrno=%d/%s",
fname, name,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---");
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---");
if (status == NSS_STATUS_SUCCESS)
print_struct_passwd(&pwd);
}
@@ -87,7 +87,7 @@ static void test_getgrnam_r(void *handle, const char *module, const char *name)
log_info("%s(\"%s\") → status=%s%-20serrno=%d/%s",
fname, name,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---");
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---");
if (status == NSS_STATUS_SUCCESS)
print_struct_group(&gr);
}
@@ -113,7 +113,7 @@ static void test_getpwuid_r(void *handle, const char *module, uid_t uid) {
log_info("%s("UID_FMT") → status=%s%-20serrno=%d/%s",
fname, uid,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---");
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---");
if (status == NSS_STATUS_SUCCESS)
print_struct_passwd(&pwd);
}
@@ -139,7 +139,7 @@ static void test_getgrgid_r(void *handle, const char *module, gid_t gid) {
log_info("%s("GID_FMT") → status=%s%-20serrno=%d/%s",
fname, gid,
nss_status_to_string(status, pretty_status, sizeof pretty_status), "\n",
errno1, errno_to_name(errno1) ?: "---");
errno1, errno1 > 0 ? ERRNO_NAME(errno1) : "---");
if (status == NSS_STATUS_SUCCESS)
print_struct_group(&gr);
}
+8 -8
View File
@@ -123,34 +123,34 @@ static void test_pid_get_cmdline_one(pid_t pid) {
int r;
r = pid_get_cmdline(pid, SIZE_MAX, 0, &c);
log_info("PID "PID_FMT": %s", pid, r >= 0 ? c : errno_to_name(r));
log_info("PID "PID_FMT": %s", pid, r >= 0 ? c : ERRNO_NAME(r));
r = pid_get_cmdline(pid, SIZE_MAX, PROCESS_CMDLINE_COMM_FALLBACK, &d);
log_info(" %s", r >= 0 ? d : errno_to_name(r));
log_info(" %s", r >= 0 ? d : ERRNO_NAME(r));
r = pid_get_cmdline(pid, SIZE_MAX, PROCESS_CMDLINE_QUOTE, &e);
log_info(" %s", r >= 0 ? e : errno_to_name(r));
log_info(" %s", r >= 0 ? e : ERRNO_NAME(r));
r = pid_get_cmdline(pid, SIZE_MAX, PROCESS_CMDLINE_QUOTE | PROCESS_CMDLINE_COMM_FALLBACK, &f);
log_info(" %s", r >= 0 ? f : errno_to_name(r));
log_info(" %s", r >= 0 ? f : ERRNO_NAME(r));
r = pid_get_cmdline(pid, SIZE_MAX, PROCESS_CMDLINE_QUOTE_POSIX, &g);
log_info(" %s", r >= 0 ? g : errno_to_name(r));
log_info(" %s", r >= 0 ? g : ERRNO_NAME(r));
r = pid_get_cmdline(pid, SIZE_MAX, PROCESS_CMDLINE_QUOTE_POSIX | PROCESS_CMDLINE_COMM_FALLBACK, &h);
log_info(" %s", r >= 0 ? h : errno_to_name(r));
log_info(" %s", r >= 0 ? h : ERRNO_NAME(r));
r = pid_get_cmdline_strv(pid, 0, &strv_a);
if (r >= 0)
ASSERT_NOT_NULL((joined = strv_join(strv_a, "\", \"")));
log_info(" \"%s\"", r >= 0 ? joined : errno_to_name(r));
log_info(" \"%s\"", r >= 0 ? joined : ERRNO_NAME(r));
joined = mfree(joined);
r = pid_get_cmdline_strv(pid, PROCESS_CMDLINE_COMM_FALLBACK, &strv_b);
if (r >= 0)
ASSERT_NOT_NULL((joined = strv_join(strv_b, "\", \"")));
log_info(" \"%s\"", r >= 0 ? joined : errno_to_name(r));
log_info(" \"%s\"", r >= 0 ? joined : ERRNO_NAME(r));
}
TEST(pid_get_cmdline) {
+2 -2
View File
@@ -169,7 +169,7 @@ TEST(path_is_temporary_fs) {
r = path_is_temporary_fs(s);
log_info_errno(r, "path_is_temporary_fs(\"%s\"): %d, %s",
s, r, r < 0 ? errno_to_name(r) : yes_no(r));
s, r, r < 0 ? ERRNO_NAME(r) : yes_no(r));
}
/* run might not be a mount point in build chroots */
@@ -186,7 +186,7 @@ TEST(path_is_read_only_fs) {
r = path_is_read_only_fs(s);
log_info_errno(r, "path_is_read_only_fs(\"%s\"): %d, %s",
s, r, r < 0 ? errno_to_name(r) : yes_no(r));
s, r, r < 0 ? ERRNO_NAME(r) : yes_no(r));
}
if (path_is_mount_point_full("/sys", NULL, AT_SYMLINK_FOLLOW) > 0)
+1 -1
View File
@@ -21,7 +21,7 @@ int device_add_errno(sd_device *dev, int error) {
r = device_add_property(dev, "UDEV_WORKER_FAILED", "1");
RET_GATHER(r, device_add_propertyf(dev, "UDEV_WORKER_ERRNO", "%i", error));
const char *str = errno_to_name(error);
const char *str = errno_name_no_fallback(error);
if (str)
RET_GATHER(r, device_add_property(dev, "UDEV_WORKER_ERRNO_NAME", str));
+1 -1
View File
@@ -296,7 +296,7 @@ static int worker_device_monitor_handler(sd_device_monitor *monitor, sd_device *
return 0;
}
const char *e = errno_to_name(r);
const char *e = errno_name_no_fallback(r);
r = sd_notifyf(/* unset_environment = */ false, "ERRNO=%i%s%s", -r, e ? "\nERRNO_NAME=" : "", strempty(e));
if (r < 0) {
log_device_warning_errno(dev, r, "Failed to send notification message to manager process, ignoring: %m");
+1 -1
View File
@@ -1069,7 +1069,7 @@ static int display_services(int argc, char *argv[], void *userdata) {
r = connect_unix_path(fd, dirfd(d), de->d_name);
if (r < 0) {
no = strjoin("No (", errno_to_name(r), ")");
no = strjoin("No (", ERRNO_NAME(r), ")");
if (!no)
return log_oom();
}