chiark / gitweb /
fsckd: free client event source before we close its fd
[elogind.git] / src / efi-boot-generator / efi-boot-generator.c
index 270dc226ef7c5016f2efd63176804bc5de729422..58c4cc278a2da38d0a5af5e1b5bdc3f283ffc7ea 100644 (file)
@@ -26,7 +26,6 @@
 #include "path-util.h"
 #include "util.h"
 #include "mkdir.h"
-#include "unit-name.h"
 #include "virt.h"
 #include "generator.h"
 #include "special.h"
@@ -58,6 +57,7 @@ int main(int argc, char *argv[]) {
                 log_debug("In initrd, exiting.");
                 return EXIT_SUCCESS;
         }
+
         if (detect_container(NULL) > 0) {
                 log_debug("In a container, exiting.");
                 return EXIT_SUCCESS;
@@ -68,24 +68,25 @@ int main(int argc, char *argv[]) {
                 return EXIT_SUCCESS;
         }
 
-        if (dir_is_empty("/boot") <= 0) {
+        if (path_is_mount_point("/boot", true) <= 0 &&
+            dir_is_empty("/boot") <= 0) {
                 log_debug("/boot already populated, exiting.");
                 return EXIT_SUCCESS;
         }
 
         r = efi_loader_get_device_part_uuid(&id);
         if (r == -ENOENT) {
-                log_debug("EFI loader partition unknown exiting.");
+                log_debug("EFI loader partition unknown, exiting.");
                 return EXIT_SUCCESS;
         } else if (r < 0) {
-                log_error("Failed to read ESP partition UUID: %s", strerror(-r));
+                log_error_errno(r, "Failed to read ESP partition UUID: %m");
                 return EXIT_FAILURE;
         }
 
-        name = strappenda(arg_dest, "/boot.mount");
+        name = strjoina(arg_dest, "/boot.mount");
         f = fopen(name, "wxe");
         if (!f) {
-                log_error("Failed to create mount unit file %s: %m", name);
+                log_error_errno(errno, "Failed to create mount unit file %s: %m", name);
                 return EXIT_FAILURE;
         }
 
@@ -100,7 +101,8 @@ int main(int argc, char *argv[]) {
         fprintf(f,
                 "# Automatially generated by systemd-efi-boot-generator\n\n"
                 "[Unit]\n"
-                "Description=EFI System Partition\n");
+                "Description=EFI System Partition\n"
+                "Documentation=man:systemd-efi-boot-generator(8)\n");
 
         r = generator_write_fsck_deps(f, arg_dest, what, "/boot", "vfat");
         if (r < 0)
@@ -117,15 +119,15 @@ int main(int argc, char *argv[]) {
 
         fflush(f);
         if (ferror(f)) {
-                log_error("Failed to write mount unit file: %m");
+                log_error_errno(errno, "Failed to write mount unit file: %m");
                 return EXIT_FAILURE;
         }
 
-        name = strappenda(arg_dest, "/boot.automount");
+        name = strjoina(arg_dest, "/boot.automount");
         fclose(f);
         f = fopen(name, "wxe");
         if (!f) {
-                log_error("Failed to create automount unit file %s: %m", name);
+                log_error_errno(errno, "Failed to create automount unit file %s: %m", name);
                 return EXIT_FAILURE;
         }
 
@@ -137,15 +139,15 @@ int main(int argc, char *argv[]) {
 
         fflush(f);
         if (ferror(f)) {
-                log_error("Failed to write automount unit file: %m");
+                log_error_errno(errno, "Failed to write automount unit file: %m");
                 return EXIT_FAILURE;
         }
 
-        name = strappenda(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/boot.automount");
+        name = strjoina(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/boot.automount");
         mkdir_parents(name, 0755);
 
         if (symlink("../boot.automount", name) < 0) {
-                log_error("Failed to create symlink %s: %m", name);
+                log_error_errno(errno, "Failed to create symlink %s: %m", name);
                 return EXIT_FAILURE;
         }