Line data Source code
1 : /* Copyright (C) 2022 Wildfire Games.
2 : *
3 : * Permission is hereby granted, free of charge, to any person obtaining
4 : * a copy of this software and associated documentation files (the
5 : * "Software"), to deal in the Software without restriction, including
6 : * without limitation the rights to use, copy, modify, merge, publish,
7 : * distribute, sublicense, and/or sell copies of the Software, and to
8 : * permit persons to whom the Software is furnished to do so, subject to
9 : * the following conditions:
10 : *
11 : * The above copyright notice and this permission notice shall be included
12 : * in all copies or substantial portions of the Software.
13 : *
14 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 : * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 : * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 : * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18 : * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19 : * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20 : * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 : */
22 :
23 : /*
24 : * higher-level interface on top of sysdep/filesystem.h
25 : */
26 :
27 : #ifndef INCLUDED_FILE_SYSTEM
28 : #define INCLUDED_FILE_SYSTEM
29 :
30 : #include "lib/os_path.h"
31 : #include "lib/posix/posix_filesystem.h" // mode_t
32 :
33 : #include <vector>
34 :
35 : bool DirectoryExists(const OsPath& path);
36 : bool FileExists(const OsPath& pathname);
37 :
38 : u64 FileSize(const OsPath& pathname);
39 :
40 :
41 : // (bundling size and mtime avoids a second expensive call to stat())
42 14348 : class CFileInfo
43 : {
44 : public:
45 391 : CFileInfo()
46 391 : {
47 391 : }
48 :
49 4694 : CFileInfo(const OsPath& name, off_t size, time_t mtime)
50 4694 : : name(name), size(size), mtime(mtime)
51 : {
52 4694 : }
53 :
54 8491 : const OsPath& Name() const
55 : {
56 8491 : return name;
57 : }
58 :
59 2706 : off_t Size() const
60 : {
61 2706 : return size;
62 : }
63 :
64 2705 : time_t MTime() const
65 : {
66 2705 : return mtime;
67 : }
68 :
69 : private:
70 : OsPath name;
71 : off_t size;
72 : time_t mtime;
73 : };
74 :
75 : Status GetFileInfo(const OsPath& pathname, CFileInfo* fileInfo);
76 :
77 : typedef std::vector<CFileInfo> CFileInfos;
78 : typedef std::vector<OsPath> DirectoryNames;
79 :
80 : Status GetDirectoryEntries(const OsPath& path, CFileInfos* files, DirectoryNames* subdirectoryNames);
81 :
82 : // same as boost::filesystem::create_directories, except that mkdir is invoked with
83 : // <mode> instead of 0755.
84 : // If the breakpoint is enabled, debug_break will be called if the directory didn't exist and couldn't be created.
85 : Status CreateDirectories(const OsPath& path, mode_t mode, bool breakpoint = true);
86 :
87 : Status DeleteDirectory(const OsPath& dirPath);
88 :
89 : Status CopyFile(const OsPath& path, const OsPath& newPath, bool override_if_exists = false);
90 :
91 : Status RenameFile(const OsPath& path, const OsPath& newPath);
92 :
93 : #endif // #ifndef INCLUDED_FILE_SYSTEM
|