]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-image: minor refactoring to inspect_kernel()
authorLennart Poettering <lennart@amutable.com>
Tue, 10 Feb 2026 14:39:54 +0000 (15:39 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 3 Apr 2026 06:15:27 +0000 (08:15 +0200)
Let's add make three arguments optional, by splitting inspect_kernel()
from inspect_kernel_full().

Let's also downgrade logging to debug, so that this becomes more
library-like. Let's log on the call-site instead.

src/bootctl/bootctl-uki.c
src/kernel-install/kernel-install.c
src/shared/kernel-image.c
src/shared/kernel-image.h
src/vmspawn/vmspawn.c

index 1b52252210036b51eee4b5ee4d6a3ac60fc47840..7c37081cbfdd73fc04cfd87cdc02c91e10c03cf5 100644 (file)
@@ -5,14 +5,15 @@
 #include "alloc-util.h"
 #include "bootctl-uki.h"
 #include "kernel-image.h"
+#include "log.h"
 
 int verb_kernel_identify(int argc, char *argv[], uintptr_t _data, void *userdata) {
         KernelImageType t;
         int r;
 
-        r = inspect_kernel(AT_FDCWD, argv[1], &t, NULL, NULL, NULL);
+        r = inspect_kernel(AT_FDCWD, argv[1], &t);
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Failed to inspect '%s': %m", argv[1]);
 
         puts(kernel_image_type_to_string(t));
         return 0;
@@ -23,9 +24,9 @@ int verb_kernel_inspect(int argc, char *argv[], uintptr_t _data, void *userdata)
         KernelImageType t;
         int r;
 
-        r = inspect_kernel(AT_FDCWD, argv[1], &t, &cmdline, &uname, &pname);
+        r = inspect_kernel_full(AT_FDCWD, argv[1], &t, &cmdline, &uname, &pname);
         if (r < 0)
-                return r;
+                return log_error_errno(r, "Failed to inspect '%s': %m", argv[1]);
 
         printf("Kernel Type: %s\n", kernel_image_type_to_string(t));
         if (cmdline)
index 001e9e20e2f8af4150a2a55dccd99d2075682826..740791bba3562677b251372c5dae0d457a748fb8 100644 (file)
@@ -750,12 +750,21 @@ static int context_from_cmdline(Context *c, Action action) {
 }
 
 static int context_inspect_kernel(Context *c) {
+        int r;
+
         assert(c);
 
         if (!c->kernel)
                 return 0;
 
-        return inspect_kernel(c->rfd, c->kernel, &c->kernel_image_type, NULL, NULL, NULL);
+        r = inspect_kernel(
+                        c->rfd,
+                        c->kernel,
+                        &c->kernel_image_type);
+        if (r < 0)
+                return log_error_errno(r, "Failed to inspect kernel image '%s': %m", c->kernel);
+
+        return 0;
 }
 
 static int context_ensure_layout(Context *c) {
index 0f2a646da5eb19df30490de5a675ad7a2b25e602..e2db555cb4491ebda05b4fb0f42331ec4d1fe6c2 100644 (file)
@@ -55,7 +55,7 @@ static int uki_read_pretty_name(
                         "PRETTY_NAME", &pname,
                         "NAME",        &name);
         if (r < 0)
-                return log_error_errno(r, "Failed to parse embedded os-release file: %m");
+                return log_debug_errno(r, "Failed to parse embedded os-release file: %m");
 
         /* follow the same logic as os_release_pretty_name() */
         if (!isempty(pname))
@@ -65,7 +65,7 @@ static int uki_read_pretty_name(
         else {
                 char *n = strdup("Linux");
                 if (!n)
-                        return log_oom();
+                        return -ENOMEM;
 
                 *ret = n;
         }
@@ -115,7 +115,7 @@ static int inspect_uki(
         return 0;
 }
 
-int inspect_kernel(
+int inspect_kernel_full(
                 int dir_fd,
                 const char *filename,
                 KernelImageType *ret_type,
@@ -131,23 +131,22 @@ int inspect_kernel(
         int r;
 
         assert(dir_fd >= 0 || IN_SET(dir_fd, AT_FDCWD, XAT_FDROOT));
-        assert(filename);
 
         fd = xopenat(dir_fd, filename, O_RDONLY|O_CLOEXEC);
         if (fd < 0)
-                return log_error_errno(fd, "Failed to open kernel image file '%s': %m", filename);
+                return log_debug_errno(fd, "Failed to open kernel image file '%s': %m", strna(filename));
 
         r = pe_load_headers(fd, &dos_header, &pe_header);
         if (r == -EBADMSG) /* not a valid PE file */
                 goto not_uki;
         if (r < 0)
-                return log_error_errno(r, "Failed to parse kernel image file '%s': %m", filename);
+                return log_debug_errno(r, "Failed to parse kernel image file '%s': %m", strna(filename));
 
         r = pe_load_sections(fd, dos_header, pe_header, &sections);
         if (r == -EBADMSG) /* not a valid PE file */
                 goto not_uki;
         if (r < 0)
-                return log_error_errno(r, "Failed to load PE sections from kernel image file '%s': %m", filename);
+                return log_debug_errno(r, "Failed to load PE sections from kernel image file '%s': %m", strna(filename));
 
         if (pe_is_uki(pe_header, sections)) {
                 r = inspect_uki(fd, pe_header, sections, ret_cmdline, ret_uname, ret_pretty_name);
index 85a3308986c5c78c58e664d1ba60f004381ecbf3..c0b8847cafb5443b92e5cef4b8366befaf1cf2e3 100644 (file)
@@ -14,10 +14,17 @@ typedef enum KernelImageType {
 
 DECLARE_STRING_TABLE_LOOKUP_TO_STRING(kernel_image_type, KernelImageType);
 
-int inspect_kernel(
+int inspect_kernel_full(
                 int dir_fd,
                 const char *filename,
                 KernelImageType *ret_type,
                 char **ret_cmdline,
                 char **ret_uname,
                 char **ret_pretty_name);
+
+static inline int inspect_kernel(
+                int dir_fd,
+                const char *filename,
+                KernelImageType *ret_type) {
+        return inspect_kernel_full(dir_fd, filename, ret_type, NULL, NULL, NULL);
+}
index 5d0962daf6104bf23d90707c27863b96c9c5195f..8777948626356950925ce03c3d477ae14d2b2e27 100644 (file)
@@ -1400,13 +1400,7 @@ static int cmdline_add_kernel_cmdline(char ***cmdline, const char *kernel, const
 
         KernelImageType type = _KERNEL_IMAGE_TYPE_INVALID;
         if (kernel) {
-                r = inspect_kernel(
-                                AT_FDCWD,
-                                kernel,
-                                &type,
-                                /* ret_cmdline= */ NULL,
-                                /* ret_uname= */ NULL,
-                                /* ret_pretty_name= */ NULL);
+                r = inspect_kernel(AT_FDCWD, kernel, &type);
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine '%s' kernel image type: %m", kernel);
         }