summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorJesse <jesse.buhagiar@student.rmit.edu.au>2019-08-02 23:18:47 +1000
committerAndreas Kling <awesomekling@gmail.com>2019-08-02 15:18:47 +0200
commit401c87a0ccb7bb72d40622ae326889cacaaf5f7a (patch)
tree1cc33cadd0ddd9c15815f4577aaffb61562e7e15 /Userland
parent3f91d2d0ccb1174adbc645e37013fc4a0bd93929 (diff)
downloadserenity-401c87a0ccb7bb72d40622ae326889cacaaf5f7a.zip
Kernel: mount system call (#396)
It is now possible to mount ext2 `DiskDevice` devices under Serenity on any folder in the root filesystem. Currently any user can do this with any permissions. There's a fair amount of assumptions made here too, that might not be too good, but can be worked on in the future. This is a good start to allow more dynamic operation under the OS itself. It is also currently impossible to unmount and such, and devices will fail to mount in Linux as the FS 'needs to be cleaned'. I'll work on getting `umount` done ASAP to rectify this (as well as working on less assumption-making in the mount syscall. We don't want to just be able to mount DiskDevices!). This could probably be fixed with some `-t` flag or something similar.
Diffstat (limited to 'Userland')
-rw-r--r--Userland/mount.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/Userland/mount.cpp b/Userland/mount.cpp
new file mode 100644
index 0000000000..751063799e
--- /dev/null
+++ b/Userland/mount.cpp
@@ -0,0 +1,29 @@
+#include <LibCore/CArgsParser.h>
+#include <stdio.h>
+#include <unistd.h>
+
+// This version of 'mount' must have the following arguments
+// 'mount <device_path> <mount_point>
+// It can currently only mount _physical_ devices found in /dev
+//
+// Currently, it is only possible to mount ext2 devices. Sorry! :^)
+int main(int argc, char** argv)
+{
+ CArgsParser args_parser("mount");
+ args_parser.add_arg("devname", "device path");
+ args_parser.add_arg("mountpoint", "mount point");
+ CArgsParserResult args = args_parser.parse(argc, argv);
+
+ if (argc == 3) {
+ // Let's use lstat so we can convert devname into a major/minor device pair!
+ if (mount(argv[1], argv[2]) < 0) {
+ perror("mount");
+ return 1;
+ }
+ } else {
+ args_parser.print_usage();
+ return 0;
+ }
+
+ return 0;
+}