summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys/fssystem/fs_i_storage.h
blob: 37336c9aec17006da5215ab7b28769b563b9c2bb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "common/overflow.h"
#include "core/file_sys/errors.h"
#include "core/file_sys/vfs/vfs.h"

namespace FileSys {

class IStorage : public VfsFile {
public:
    virtual std::string GetName() const override {
        return {};
    }

    virtual VirtualDir GetContainingDirectory() const override {
        return {};
    }

    virtual bool IsWritable() const override {
        return true;
    }

    virtual bool IsReadable() const override {
        return true;
    }

    virtual bool Resize(size_t size) override {
        return false;
    }

    virtual bool Rename(std::string_view name) override {
        return false;
    }

    static inline Result CheckAccessRange(s64 offset, s64 size, s64 total_size) {
        R_UNLESS(offset >= 0, ResultInvalidOffset);
        R_UNLESS(size >= 0, ResultInvalidSize);
        R_UNLESS(Common::WrappingAdd(offset, size) >= offset, ResultOutOfRange);
        R_UNLESS(offset + size <= total_size, ResultOutOfRange);
        R_SUCCEED();
    }
};

class IReadOnlyStorage : public IStorage {
public:
    virtual bool IsWritable() const override {
        return false;
    }

    virtual size_t Write(const u8* buffer, size_t size, size_t offset) override {
        return 0;
    }
};

} // namespace FileSys