1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:07:45 +00:00

mount: Separate mounting by line into a new function

This commit is contained in:
Tim Schumacher 2022-06-30 19:09:46 +02:00 committed by Linus Groh
parent 6453f74642
commit e04155475d

View file

@ -64,26 +64,16 @@ static int get_source_fd(StringView source)
return fd_or_error.release_value(); return fd_or_error.release_value();
} }
static ErrorOr<void> mount_all() static bool mount_by_line(String const& line)
{ {
// Mount all filesystems listed in /etc/fstab.
dbgln("Mounting all filesystems...");
auto fstab = TRY(Core::File::open("/etc/fstab", Core::OpenMode::ReadOnly));
bool all_ok = true;
while (fstab->can_read_line()) {
auto line = fstab->read_line();
// Skip comments and blank lines. // Skip comments and blank lines.
if (line.is_empty() || line.starts_with("#")) if (line.is_empty() || line.starts_with("#"))
continue; return true;
Vector<String> parts = line.split('\t'); Vector<String> parts = line.split('\t');
if (parts.size() < 3) { if (parts.size() < 3) {
warnln("Invalid fstab entry: {}", line); warnln("Invalid fstab entry: {}", line);
all_ok = false; return false;
continue;
} }
auto mountpoint = parts[1]; auto mountpoint = parts[1];
@ -92,7 +82,7 @@ static ErrorOr<void> mount_all()
if (mountpoint == "/") { if (mountpoint == "/") {
dbgln("Skipping mounting root"); dbgln("Skipping mounting root");
continue; return true;
} }
auto filename = parts[0]; auto filename = parts[0];
@ -104,9 +94,25 @@ static ErrorOr<void> mount_all()
auto error_or_void = Core::System::mount(fd, mountpoint, fstype, flags); auto error_or_void = Core::System::mount(fd, mountpoint, fstype, flags);
if (error_or_void.is_error()) { if (error_or_void.is_error()) {
warnln("Failed to mount {} (FD: {}) ({}) on {}: {}", filename, fd, fstype, mountpoint, strerror(errno)); warnln("Failed to mount {} (FD: {}) ({}) on {}: {}", filename, fd, fstype, mountpoint, strerror(errno));
all_ok = false; return false;
continue;
} }
return true;
}
static ErrorOr<void> mount_all()
{
// Mount all filesystems listed in /etc/fstab.
dbgln("Mounting all filesystems...");
auto fstab = TRY(Core::File::open("/etc/fstab", Core::OpenMode::ReadOnly));
bool all_ok = true;
while (fstab->can_read_line()) {
auto line = fstab->read_line();
if (!mount_by_line(line))
all_ok = false;
} }
if (all_ok) if (all_ok)