1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fs_UserArchive.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev:$
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FS_CTR_MPCORE_FS_USERARCHIVE_H_
17 #define NN_FS_CTR_MPCORE_FS_USERARCHIVE_H_
18 
19 #include <nn/fs/CTR/MPCore/fs_UserFileSystem.h>
20 
21 namespace nn { namespace fs { namespace CTR { namespace MPCore { namespace detail {
22 
23 class IFile
24 {
25 public:
26     virtual Result TryRead(s32* pOut, s64 offset, void* buffer, size_t size) = 0;
27     virtual Result TryWrite(s32* pOut, s64 offset, const void* buffer, size_t size, bool flush=true) = 0;
28     virtual Result TryGetSize(s64* pOut) const = 0;
29     virtual Result TrySetSize(s64 size) = 0;
30     virtual Result TryFlush() = 0;
31 
32     virtual Result TrySetPriority(s32 priority) = 0;
33     virtual Result TryGetPriority(s32* pOut) const = 0;
34 
35     virtual Result DuplicateHandle(Handle* pOut, s64 offset, s64 length) = 0;
36     virtual Result OpenLinkHandle(Handle* pOut) = 0;
37 
GetFileHandle()38     virtual Handle GetFileHandle() { return nn::Handle(); }
DetachFileHandle()39     virtual void DetachFileHandle() { }
40 
41     virtual void Close() = 0;
42 
~IFile()43     virtual ~IFile() {}
44 };
45 
46 class IDirectory
47 {
48 public:
49     virtual Result TryRead(s32* pNumEntriesOut, DirectoryEntry pEntries[], s32 numEntries) = 0;
50 
51     virtual void Close() = 0;
52 
53     virtual Result TrySetPriority(s32 priority) = 0;
54     virtual Result TryGetPriority(s32* pOut) const = 0;
55 
~IDirectory()56     virtual ~IDirectory() {}
57 };
58 
59 class IArchive
60 {
61 public:
62     virtual Result OpenFile(IFile** pOut, const Path& path, bit32 mode) = 0;
63     virtual Result OpenDirectory(IDirectory** pOut, const Path& path) = 0;
64     virtual Result DeleteFile(const Path& path) = 0;
65     virtual Result RenameFile(const Path& currentPath, const Path& newPath) = 0;
66     virtual Result DeleteDirectory(const Path& path) = 0;
67     virtual Result DeleteDirectoryRecursively(const Path& path) = 0;
68     virtual Result CreateFile(const Path& path, s64 size) = 0;
69     virtual Result CreateDirectory(const Path& path) = 0;
70     virtual Result RenameDirectory(const Path& currentPath, const Path& newPath) = 0;
71     virtual Result SetArchivePriority(s32) = 0;
72     virtual Result GetArchivePriority(s32*) = 0;
GetFreeBytes(s64 *)73     virtual Result GetFreeBytes(s64*) { return nn::fs::ResultUnsupportedOperation(); }
74 
75     virtual void DeleteObject() = 0;
76 
~IArchive()77     virtual ~IArchive() {}
78 };
79 
80 Result RegisterArchive(const char* path, IArchive* archive, bool isAddOnContent = false, bool isAlias = false);
81 
82 }}}}}
83 
84 #endif
85