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

Commit cc0e96c8 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

libminradio: Add API to track SIM filesystem changes

Bug: 310710841
Test: VtsHalRadioTargetTest
Change-Id: I3f509b41752a382bb928a63338bc171f633acd24
parent 610ca0e6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <android-base/thread_annotations.h>

#include <map>
#include <set>
#include <span>

namespace android::hardware::radio::minimal::sim {
@@ -38,6 +39,7 @@ class Filesystem {
  private:
    mutable std::mutex mFilesGuard;
    std::map<Path, std::vector<uint8_t>> mFiles GUARDED_BY(mFilesGuard);
    std::set<int32_t> mUpdates GUARDED_BY(mFilesGuard);

    DISALLOW_COPY_AND_ASSIGN(Filesystem);

@@ -53,6 +55,8 @@ class Filesystem {
    std::optional<std::string> readBch(const Path& path) const;

    std::optional<Path> find(uint16_t fileId);

    std::set<int32_t> fetchAndClearUpdates();
};

namespace paths {
+9 −0
Original line number Diff line number Diff line
@@ -47,11 +47,13 @@ Filesystem::Filesystem() {
void Filesystem::write(const Path& path, FileView contents) {
    std::unique_lock lck(mFilesGuard);
    mFiles[path].assign(contents.begin(), contents.end());  // C++23: assign_range
    mUpdates.insert(path.fileId);
}

void Filesystem::write(const Path& path, std::string_view contents) {
    std::unique_lock lck(mFilesGuard);
    mFiles[path].assign(contents.begin(), contents.end());  // C++23: assign_range
    mUpdates.insert(path.fileId);
}

void Filesystem::write(const Path& path, std::vector<uint8_t>&& contents) {
@@ -84,6 +86,13 @@ std::optional<Filesystem::Path> Filesystem::find(uint16_t fileId) {
    return std::nullopt;
}

std::set<int32_t> Filesystem::fetchAndClearUpdates() {
    std::unique_lock lck(mFilesGuard);
    std::set<int32_t> result;
    std::swap(result, mUpdates);
    return result;
}

std::string Filesystem::Path::toString() const {
    return std::format("{:s}/{:X}", pathId, fileId);
}