summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2022-01-03 17:53:29 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2022-01-03 22:46:32 +0000
commit5f74fcd41cb1a1b26c23e0f2ab405ae9cf6bcc93 (patch)
tree60b1ae0a79debb1a1735dcc597f8e985e0908752
parentc790632cabf5691b0910fc6b7a5c6af31a7786aa (diff)
downloadsystemd-5f74fcd41cb1a1b26c23e0f2ab405ae9cf6bcc93.tar.gz
basic/log: allow errno values higher than 255
When the support for "synthetic errno" was added, we started truncating the errno value to just the least significant byte. This is generally OK, because errno values are defined up to ~130. The docs don't really say what the maximum value is. But at least in principle higher values could be added in the future. So let's stop truncating the values needlessly. The kernel (or libbpf?) have an error where they return 524 as an errno value (https://bugzilla.redhat.com/show_bug.cgi?id=2036145). We would confusingly truncate this to 12 (ENOMEM). It seems much nicer to let strerror() give us "Unknown error 524" rather than to print the bogus message about ENOMEM.
-rw-r--r--src/basic/log.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/basic/log.h b/src/basic/log.h
index 3bec4131a7..7218b4bf71 100644
--- a/src/basic/log.h
+++ b/src/basic/log.h
@@ -31,10 +31,10 @@ typedef enum LogTarget{
* used a regular log level. */
#define LOG_NULL (LOG_EMERG - 1)
-/* Note to readers: << and >> have lower precedence than & and | */
+/* Note to readers: << and >> have lower precedence (are evaluated earlier) than & and | */
#define SYNTHETIC_ERRNO(num) (1 << 30 | (num))
#define IS_SYNTHETIC_ERRNO(val) ((val) >> 30 & 1)
-#define ERRNO_VALUE(val) (abs(val) & 255)
+#define ERRNO_VALUE(val) (abs(val) & ~(1 << 30))
/* The callback function to be invoked when syntax warnings are seen
* in the unit files. */