Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acac60d5 authored by Yi-yo Chiang's avatar Yi-yo Chiang Committed by Gerrit Code Review
Browse files

Merge "libfstab: Add const overload of GetEntryForMountPoint()"

parents 95cfb31b d45750aa
Loading
Loading
Loading
Loading
+27 −17
Original line number Diff line number Diff line
@@ -488,13 +488,21 @@ std::set<std::string> ExtraBootDevices(const Fstab& fstab) {
    return boot_devices;
}

template <typename Pred>
std::vector<FstabEntry*> GetEntriesByPred(Fstab* fstab, const Pred& pred) {
// Helper class that maps Fstab* -> FstabEntry; const Fstab* -> const FstabEntry.
template <typename FstabPtr>
struct FstabPtrEntry {
    using is_const_fstab = std::is_const<std::remove_pointer_t<FstabPtr>>;
    using type = std::conditional_t<is_const_fstab::value, const FstabEntry, FstabEntry>;
};

template <typename FstabPtr, typename FstabPtrEntryType = typename FstabPtrEntry<FstabPtr>::type,
          typename Pred>
std::vector<FstabPtrEntryType*> GetEntriesByPred(FstabPtr fstab, const Pred& pred) {
    if (fstab == nullptr) {
        return {};
    }
    std::vector<FstabEntry*> entries;
    for (auto&& entry : *fstab) {
    std::vector<FstabPtrEntryType*> entries;
    for (FstabPtrEntryType& entry : *fstab) {
        if (pred(entry)) {
            entries.push_back(&entry);
        }
@@ -835,23 +843,25 @@ bool ReadDefaultFstab(Fstab* fstab) {
    return !fstab->empty();
}

FstabEntry* GetEntryForMountPoint(Fstab* fstab, const std::string& path) {
    if (fstab == nullptr) {
        return nullptr;
std::vector<FstabEntry*> GetEntriesForMountPoint(Fstab* fstab, const std::string& path) {
    return GetEntriesByPred(fstab,
                            [&path](const FstabEntry& entry) { return entry.mount_point == path; });
}

    for (auto& entry : *fstab) {
        if (entry.mount_point == path) {
            return &entry;
        }
std::vector<const FstabEntry*> GetEntriesForMountPoint(const Fstab* fstab,
                                                       const std::string& path) {
    return GetEntriesByPred(fstab,
                            [&path](const FstabEntry& entry) { return entry.mount_point == path; });
}

    return nullptr;
FstabEntry* GetEntryForMountPoint(Fstab* fstab, const std::string& path) {
    std::vector<FstabEntry*> entries = GetEntriesForMountPoint(fstab, path);
    return entries.empty() ? nullptr : entries.front();
}

std::vector<FstabEntry*> GetEntriesForMountPoint(Fstab* fstab, const std::string& path) {
    return GetEntriesByPred(fstab,
                            [&path](const FstabEntry& entry) { return entry.mount_point == path; });
const FstabEntry* GetEntryForMountPoint(const Fstab* fstab, const std::string& path) {
    std::vector<const FstabEntry*> entries = GetEntriesForMountPoint(fstab, path);
    return entries.empty() ? nullptr : entries.front();
}

std::set<std::string> GetBootDevices() {
+4 −1
Original line number Diff line number Diff line
@@ -105,10 +105,13 @@ bool ReadFstabFromDt(Fstab* fstab, bool verbose = true);
bool ReadDefaultFstab(Fstab* fstab);
bool SkipMountingPartitions(Fstab* fstab, bool verbose = false);

FstabEntry* GetEntryForMountPoint(Fstab* fstab, const std::string& path);
// The Fstab can contain multiple entries for the same mount point with different configurations.
std::vector<FstabEntry*> GetEntriesForMountPoint(Fstab* fstab, const std::string& path);

// Like GetEntriesForMountPoint() but return only the first entry or nullptr if no entry is found.
FstabEntry* GetEntryForMountPoint(Fstab* fstab, const std::string& path);
const FstabEntry* GetEntryForMountPoint(const Fstab* fstab, const std::string& path);

// This method builds DSU fstab entries and transfer the fstab.
//
// fstab points to the unmodified fstab.