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:
committed by
Lennart Poettering
parent
025762516f
commit
d90d0a1f63
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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, §ions);
|
||||
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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user