summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 3cc75ee..0eddfb5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -93,9 +93,16 @@ static void
on_quit (state_t *state)
{
ply_terminal_session_close_log (state->session);
- umount ("/sysroot");
ply_boot_splash_hide (state->boot_splash);
ply_event_loop_exit (state->loop, 0);
+
+ fchdir (state->original_root_dir_fd);
+ chroot (".");
+ ply_unmount_filesystem (PLY_WORKING_DIRECTORY "/sysroot");
+ ply_unmount_filesystem (PLY_WORKING_DIRECTORY "/sysroot");
+ ply_unmount_filesystem (PLY_WORKING_DIRECTORY "/proc");
+ ply_unmount_filesystem (PLY_WORKING_DIRECTORY "/dev/pts");
+ ply_unmount_filesystem (PLY_WORKING_DIRECTORY);
}
static ply_boot_server_t *
@@ -185,7 +192,7 @@ create_working_directory (state_t *state)
{
ply_trace ("creating working directory '%s'",
PLY_WORKING_DIRECTORY);
- if (!ply_create_directory (PLY_WORKING_DIRECTORY))
+ if (!ply_create_detachable_directory (PLY_WORKING_DIRECTORY))
return false;
ply_trace ("changing to working directory");
@@ -212,6 +219,10 @@ create_working_directory (state_t *state)
if (!ply_create_directory (PLYMOUTH_PLUGIN_PATH + 1))
return false;
+ ply_trace ("creating sysroot subdirectory");
+ if (!ply_create_directory ("sysroot"))
+ return false;
+
return true;
}