]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-image: make inspect_kernel() optionally take directory fd
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 8 Apr 2023 19:12:53 +0000 (04:12 +0900)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 9 Apr 2023 05:10:20 +0000 (07:10 +0200)
src/boot/bootctl-uki.c
src/shared/kernel-image.c
src/shared/kernel-image.h

index 718bac5ab24afdaaf658720333ef936532892fd2..8808c30569aef1bccb2ca43756f9b08f9a393086 100644 (file)
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <fcntl.h>
+
 #include "alloc-util.h"
 #include "bootctl-uki.h"
 #include "kernel-image.h"
@@ -8,7 +10,7 @@ int verb_kernel_identify(int argc, char *argv[], void *userdata) {
         KernelImageType t;
         int r;
 
-        r = inspect_kernel(argv[1], &t, NULL, NULL, NULL);
+        r = inspect_kernel(AT_FDCWD, argv[1], &t, NULL, NULL, NULL);
         if (r < 0)
                 return r;
 
@@ -21,7 +23,7 @@ int verb_kernel_inspect(int argc, char *argv[], void *userdata) {
         KernelImageType t;
         int r;
 
-        r = inspect_kernel(argv[1], &t, &cmdline, &uname, &pname);
+        r = inspect_kernel(AT_FDCWD, argv[1], &t, &cmdline, &uname, &pname);
         if (r < 0)
                 return r;
 
index b5ea1bb2a0bcac3ce1162fafe23886d6c4f20ecd..3d2ec820d96efa3b1c03204453a09fbed4c2124d 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "fd-util.h"
+#include "fileio.h"
 #include "env-file.h"
 #include "kernel-image.h"
 #include "os-util.h"
@@ -255,6 +256,7 @@ static int inspect_uki(
 }
 
 int inspect_kernel(
+                int dir_fd,
                 const char *filename,
                 KernelImageType *ret_type,
                 char **ret_cmdline,
@@ -267,11 +269,12 @@ int inspect_kernel(
         KernelImageType t;
         int r;
 
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
         assert(filename);
 
-        f = fopen(filename, "re");
-        if (!f)
-                return log_error_errno(errno, "Failed to open kernel image file '%s': %m", filename);
+        r = xfopenat(dir_fd, filename, "re", 0, &f);
+        if (r < 0)
+                return log_error_errno(r, "Failed to open kernel image file '%s': %m", filename);
 
         r = pe_sections(f, &sections, &scount);
         if (r < 0)
index d1875920cc7ef7f73cca027d9e01135387cfe0b1..41b2c08f9a6ea410f78f515ca9b4ebcfcf49db66 100644 (file)
@@ -16,6 +16,7 @@ typedef enum KernelImageType {
 const char* kernel_image_type_to_string(KernelImageType t) _const_;
 
 int inspect_kernel(
+                int dir_fd,
                 const char *filename,
                 KernelImageType *ret_type,
                 char **ret_cmdline,