kernel-image: minor refactoring to inspect_kernel()

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.
This commit is contained in:
Lennart Poettering
2026-04-03 08:15:27 +02:00
committed by Lennart Poettering
parent 025762516f
commit d90d0a1f63
5 changed files with 30 additions and 20 deletions
+5 -4
View 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)
+10 -1
View 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) {
+6 -7
View 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);
+8 -1
View 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);
}
+1 -7
View 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);
}