#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;
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)
}
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) {
"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))
else {
char *n = strdup("Linux");
if (!n)
- return log_oom();
+ return -ENOMEM;
*ret = n;
}
return 0;
}
-int inspect_kernel(
+int inspect_kernel_full(
int dir_fd,
const char *filename,
KernelImageType *ret_type,
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);
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);
+}
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);
}