jffs2reset: use jffs2_mark if rootfs_data isn't mounted
[project/fstools.git] / libfstools / extroot.c
index 4225d8b..418df94 100644 (file)
@@ -33,8 +33,7 @@ int mount_extroot(void)
 {
        char ldlib_path[32];
        char block_path[32];
-       char kmod_loader[128];
-       char *kmod_prefix;
+       char kmod_loader[64];
        struct stat s;
        pid_t pid;
 
@@ -61,10 +60,12 @@ int mount_extroot(void)
 
        /* set LD_LIBRARY_PATH env var and load kmods from overlay if we found a lib directory there */
        if (!stat(ldlib_path, &s) && S_ISDIR(s.st_mode)) {
+               ULOG_INFO("loading kmods from internal overlay\n");
                setenv("LD_LIBRARY_PATH", ldlib_path, 1);
-               kmod_prefix = dirname(ldlib_path);
-               sprintf(kmod_loader, "/sbin/kmodloader %s/etc/modules-boot.d/ %s", kmod_prefix, kmod_prefix);
-               system(kmod_loader);
+               snprintf(kmod_loader, sizeof(kmod_loader),
+                        "/sbin/kmodloader %s/etc/modules-boot.d/", dirname(ldlib_path));
+               if (system(kmod_loader))
+                       ULOG_ERR("failed to launch kmodloader from internal overlay\n");
        }
 
        pid = fork();
@@ -87,10 +88,10 @@ int mount_extroot(void)
                                mkdir("/tmp/extroot/mnt/rom", 0755);
 
                                if (mount_move("/tmp/extroot", "", "/mnt")) {
-                                       fprintf(stderr, "moving pivotroot failed - continue normal boot\n");
+                                       ULOG_ERR("moving pivotroot failed - continue normal boot\n");
                                        umount("/tmp/extroot/mnt");
                                } else if (pivot("/mnt", "/rom")) {
-                                       fprintf(stderr, "switching to pivotroot failed - continue normal boot\n");
+                                       ULOG_ERR("switching to pivotroot failed - continue normal boot\n");
                                        umount("/mnt");
                                } else {
                                        umount("/tmp/overlay");
@@ -101,10 +102,10 @@ int mount_extroot(void)
                                }
                        } else if (find_mount("/tmp/extroot/overlay")) {
                                if (mount_move("/tmp/extroot", "", "/overlay")) {
-                                       fprintf(stderr, "moving extroot failed - continue normal boot\n");
+                                       ULOG_ERR("moving extroot failed - continue normal boot\n");
                                        umount("/tmp/extroot/overlay");
                                } else if (fopivot("/overlay", "/rom")) {
-                                       fprintf(stderr, "switching to extroot failed - continue normal boot\n");
+                                       ULOG_ERR("switching to extroot failed - continue normal boot\n");
                                        umount("/overlay");
                                } else {
                                        umount("/tmp/overlay");