The Battle for Wesnoth  1.19.8+dev
filesystem.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2024
3  by David White <dave@whitevine.net>
4  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY.
12 
13  See the COPYING file for more details.
14 */
15 
16 /**
17  * @file
18  * Declarations for File-IO.
19  */
20 
21 #pragma once
22 
23 #include <ctime>
24 #include <cstdint>
25 #include <fstream>
26 #include <iosfwd>
27 #include <memory>
28 #include <string>
29 #include <vector>
30 
31 #include "exceptions.hpp"
32 #include "game_version.hpp"
33 #include "global.hpp"
34 #include "utils/optional_fwd.hpp"
35 
36 namespace game_config {
37 extern std::string path;
38 extern std::string default_preferences_path;
39 extern bool check_migration;
40 
41 /** observer team name used for observer team chat */
42 extern const std::string observer_team_name;
43 
44 extern int cache_compression_level;
45 }
46 
47 class config;
48 class game_config_view;
49 struct SDL_RWops;
50 
51 namespace filesystem {
52 
53 using scoped_istream = std::unique_ptr<std::istream>;
54 using scoped_ostream = std::unique_ptr<std::ostream>;
55 
57 {
58  void operator()(SDL_RWops*) const noexcept;
59 };
60 
61 using rwops_ptr = std::unique_ptr<SDL_RWops, sdl_rwops_deleter>;
62 
63 rwops_ptr make_read_RWops(const std::string &path);
64 rwops_ptr make_write_RWops(const std::string &path);
65 
66 /** An exception object used when an IO error occurs */
67 struct io_exception : public game::error {
68  io_exception() : game::error("") {}
69  io_exception(const std::string& msg) : game::error(msg) {}
70 };
71 
72 struct file_tree_checksum;
73 
77 
78 // default extensions
79 const std::string map_extension = ".map";
80 const std::string mask_extension = ".mask";
81 const std::string wml_extension = ".cfg";
82 
83 // A list of file and directory blacklist patterns
85 {
86 public:
89  {}
90  blacklist_pattern_list(const std::vector<std::string>& file_patterns, const std::vector<std::string>& directory_patterns)
91  : file_patterns_(file_patterns), directory_patterns_(directory_patterns)
92  {}
93 
94  bool match_file(const std::string& name) const;
95 
96  bool match_dir(const std::string& name) const;
97 
98  void add_file_pattern(const std::string& pattern)
99  {
100  file_patterns_.push_back(pattern);
101  }
102 
103  void add_directory_pattern(const std::string& pattern)
104  {
105  directory_patterns_.push_back(pattern);
106  }
107 
108  void remove_blacklisted_files_and_dirs(std::vector<std::string>& files, std::vector<std::string>& directories) const;
109 
110 private:
111  std::vector<std::string> file_patterns_;
112  std::vector<std::string> directory_patterns_;
113 };
114 
116 
117 /**
118  * Get a list of all files and/or directories in a given directory.
119  *
120  * @param dir The directory to examine.
121  * @param[out] files The files in @a dir. Won't be used if nullptr.
122  * @param[out] dirs The directories in @a dir. Won't be used if nullptr.
123  * @param mode Determines whether the entire path or just the filename is retrieved.
124  * @param filter Determines if we skip images and sounds directories.
125  * @param reorder Triggers the special handling of _main.cfg and _final.cfg.
126  * @param[out] checksum Can be used to store checksum info.
127  */
128 void get_files_in_dir(const std::string &dir,
129  std::vector<std::string>* files,
130  std::vector<std::string>* dirs=nullptr,
134  file_tree_checksum* checksum = nullptr);
135 
136 std::string get_dir(const std::string &dir);
137 
138 /**
139  * Try to autodetect the location of the game data dir. Note that
140  * the root of the source tree currently doubles as the data dir.
141  */
142 std::string autodetect_game_data_dir(std::string exe_dir);
143 
144 // The location of various important files/folders:
145 /**
146  * location of preferences file containing preferences that are synced between computers
147  * note that wesnoth does not provide the syncing functionality itself
148  */
149 std::string get_synced_prefs_file();
150 /** location of preferences file containing preferences that aren't synced between computers */
151 std::string get_unsynced_prefs_file();
152 std::string get_credentials_file();
153 std::string get_default_prefs_file();
154 std::string get_save_index_file();
155 std::string get_lua_history_file();
156 /** location of the game manual file correponding to the given locale (default: en) */
157 utils::optional<std::string> get_game_manual_file(const std::string& locale_code = "en");
158 /**
159  * parent directory for everything that should be synced between systems.
160  * implemented due to limitations of Steam's AutoCloud (non-SDK) syncing, but will also simplify things if it's ever added for any other platforms.
161  */
162 std::string get_sync_dir();
163 std::string get_saves_dir();
164 std::string get_wml_persist_dir();
165 std::string get_intl_dir();
166 std::string get_screenshot_dir();
167 std::string get_addons_data_dir();
168 std::string get_addons_dir();
169 std::string get_current_editor_dir(const std::string& addon_id);
170 const std::string get_version_path_suffix(const version_info& version);
171 const std::string& get_version_path_suffix();
172 
173 /**
174  * Get the next free filename using "name + number (3 digits) + extension"
175  * maximum 1000 files then start always giving 999
176  */
177 std::string get_next_filename(const std::string& name, const std::string& extension);
178 
180 void set_user_data_dir(std::string path);
181 void set_cache_dir(const std::string& path);
182 
183 std::string get_user_data_dir();
184 std::string get_logs_dir();
185 std::string get_cache_dir();
186 std::string get_legacy_editor_dir();
187 std::string get_core_images_dir();
188 
189 bool rename_dir(const std::string& old_dir, const std::string& new_dir);
190 
192 {
193  /**
194  * Here the version is given as a string instead of a version_info, because the
195  * logic of how many components are significant ("1.16" rather than
196  * "1.16.0") is encapsulated in find_other_version_saves_dirs().
197  */
198  std::string version;
199  std::string path;
200 
201  // constructor because emplace_back() doesn't use aggregate initialization
202  other_version_dir(const std::string& v, const std::string& p)
203  : version(v)
204  , path(p)
205  {
206  }
207 };
208 
209 /**
210  * Searches for directories containing saves created by other versions of Wesnoth.
211  *
212  * The directories returned will exist, but might not contain any saves. Changes to
213  * the filesystem (by running other versions or by deleting old directories) may
214  * change the results returned by the function.
215  */
216 std::vector<other_version_dir> find_other_version_saves_dirs();
217 
218 std::string get_cwd();
219 bool set_cwd(const std::string& dir);
220 
221 std::string get_exe_path();
222 std::string get_exe_dir();
223 std::string get_wesnothd_name();
224 
225 bool make_directory(const std::string& dirname);
226 bool delete_directory(const std::string& dirname, const bool keep_pbl = false);
227 bool delete_file(const std::string& filename);
228 
229 bool looks_like_pbl(const std::string& file);
230 
231 // Basic disk I/O:
232 
233 /** Basic disk I/O - read file. */
234 std::string read_file(const std::string& fname);
235 std::vector<uint8_t> read_file_binary(const std::string& fname);
236 std::string read_file_as_data_uri(const std::string& fname);
237 
238 filesystem::scoped_istream istream_file(const std::string& fname, bool treat_failure_as_error = true);
239 filesystem::scoped_ostream ostream_file(const std::string& fname, std::ios_base::openmode mode = std::ios_base::binary, bool create_directory = true);
240 /** Throws io_exception if an error occurs. */
241 void write_file(const std::string& fname, const std::string& data, std::ios_base::openmode mode = std::ios_base::binary);
242 /**
243  * Read a file and then writes it back out.
244  *
245  * @param src The source file.
246  * @param dest The destination of the copied file.
247  */
248 void copy_file(const std::string& src, const std::string& dest);
249 
250 std::string read_map(const std::string& name);
251 std::string read_scenario(const std::string& name);
252 
253 /**
254  * Creates a directory if it does not exist already.
255  *
256  * @param dirname Path to directory. All parents should exist.
257  * @returns True if the directory exists or could be
258  * successfully created; false otherwise.
259  */
260 bool create_directory_if_missing(const std::string& dirname);
261 /**
262  * Creates a recursive directory tree if it does not exist already
263  * @param dirname Full path of target directory. Non existing parents
264  * will be created
265  * @return True if the directory exists or could be
266  * successfully created; false otherwise.
267  */
268 bool create_directory_if_missing_recursive(const std::string& dirname);
269 
270 /** Returns true if the given file is a directory. */
271 bool is_directory(const std::string& fname);
272 
273 /** Returns true if a file or directory with such name already exists. */
274 bool file_exists(const std::string& name);
275 
276 /** Get the modification time of a file. */
277 std::time_t file_modified_time(const std::string& fname);
278 
279 /** Returns true if the file ends with the mapfile extension. */
280 bool is_map(const std::string& filename);
281 
282 /** Returns true if the file ends with the wmlfile extension. */
283 bool is_cfg(const std::string& filename);
284 
285 /** Returns true if the file ends with the maskfile extension. */
286 bool is_mask(const std::string& filename);
287 
288 /** Returns true if the file ends with '.gz'. */
289 bool is_gzip_file(const std::string& filename);
290 
291 /** Returns true if the file ends with '.bz2'. */
292 bool is_bzip2_file(const std::string& filename);
293 
294 inline bool is_compressed_file(const std::string& filename) {
296 }
297 
298 /**
299  * Returns whether the given filename is a legal name for a user-created file.
300  *
301  * This is meant to be used for any files created by Wesnoth where user input
302  * is required, including save files and add-on files for uploading to the
303  * add-ons server.
304  *
305  * @param name File name to verify.
306  * @param allow_whitespace Whether whitespace should be allowed.
307  */
308 bool is_legal_user_file_name(const std::string& name, bool allow_whitespace = true);
309 
311 {
313  explicit file_tree_checksum(const config& cfg);
314  void write(config& cfg) const;
315  void reset() {nfiles = 0;modified = 0;sum_size=0;}
316  // @todo make variables private!
317  std::size_t nfiles, sum_size;
318  std::time_t modified;
319  bool operator==(const file_tree_checksum &rhs) const;
320  bool operator!=(const file_tree_checksum &rhs) const
321  { return !operator==(rhs); }
322 };
323 
324 /** Get the time at which the data/ tree was last modified at. */
325 const file_tree_checksum& data_tree_checksum(bool reset = false);
326 
327 /** Returns the size of a file, or -1 if the file doesn't exist. */
328 int file_size(const std::string& fname);
329 
330 /** Returns the sum of the sizes of the files contained in a directory. */
331 int dir_size(const std::string& path);
332 
333 /**
334  * Returns the base filename of a file, with directory name stripped.
335  * Equivalent to a portable basename() function.
336  *
337  * If @a remove_extension is true, the filename extension will be stripped
338  * from the returned value.
339  */
340 std::string base_name(const std::string& file, const bool remove_extension = false);
341 
342 /**
343  * Returns the directory name of a file, with filename stripped.
344  * Equivalent to a portable dirname()
345  */
346 std::string directory_name(const std::string& file);
347 
348 /**
349  * Finds the nearest parent in existence for a file or directory.
350  *
351  * @note The file's own existence is not checked.
352  *
353  * @returns An absolute path to the closest parent of the given path, or an
354  * empty string if none could be found. While on POSIX platforms this
355  * cannot happen (unless the original path was already empty), on
356  * Windows it might be the case that the original path refers to a
357  * drive letter or network share that does not exist.
358  */
359 std::string nearest_extant_parent(const std::string& file);
360 
361 /**
362  * Returns the absolute path of a file.
363  *
364  * @param path Original path.
365  * @param normalize_separators Whether to substitute path separators with the
366  * platform's preferred format.
367  * @param resolve_dot_entries Whether to resolve . and .. directory entries.
368  * This requires @a path to refer to a valid
369  * existing object.
370  *
371  * @returns An absolute path -- that is, a path that is independent of the
372  * current working directory for the process. If resolve_dot_entries
373  * is set to true, the returned path has . and .. components resolved;
374  * however, if resolution fails because a component does not exist, an
375  * empty string is returned instead.
376  */
377 std::string normalize_path(const std::string& path,
378  bool normalize_separators = false,
379  bool resolve_dot_entries = false);
380 
381 /** Helper function to convert absolute path to wesnoth relative path */
382 bool to_asset_path(std::string& abs_path,
383  const std::string& addon_id,
384  const std::string& asset_type);
385 
386 /**
387  * Sanitizes a path to remove references to the user's name.
388  */
389 std::string sanitize_path(const std::string& path);
390 
391 /**
392  * Returns whether the path is the root of the file hierarchy.
393  *
394  * @note This function is unreliable for paths that do not exist -- it will
395  * always return @a false for those.
396  */
397 bool is_root(const std::string& path);
398 
399 /**
400  * Returns the name of the root device if included in the given path.
401  *
402  * This only properly makes sense on Windows with paths containing a drive
403  * letter or UNC at the start -- otherwise, it will return the empty string. To
404  * ensure that a suitable root name can be found you might want to use
405  * normalize_path() first with @a resolve_dot_entries set to true.
406  */
407 std::string root_name(const std::string& path);
408 
409 /**
410  * Returns whether the path seems to be relative.
411  */
412 bool is_relative(const std::string& path);
413 
414 /**
415  * Returns whether @a c is a path separator.
416  *
417  * @note / is always a path separator. Additionally, on Windows \\ is a
418  * path separator as well.
419  */
420 bool is_path_sep(char c);
421 
422 /**
423  * Returns the standard path separator for the current platform.
424  */
425 char path_separator();
426 
427 /**
428  * The paths manager is responsible for recording the various paths
429  * that binary files may be located at.
430  * It should be passed a config object which holds binary path information.
431  * This is in the format
432  *@verbatim
433  * [binary_path]
434  * path=<path>
435  * [/binary_path]
436  * Binaries will be searched for in [wesnoth-path]/data/<path>/images/
437  *@endverbatim
438  */
440 {
444 
445  void set_paths(const game_config_view& cfg);
446 
447 private:
450 
451  void cleanup();
452 
453  std::vector<std::string> paths_;
454 };
455 
457 
458 /**
459  * Returns a vector with all possible paths to a given type of binary,
460  * e.g. 'images', 'sounds', etc,
461  */
462 NOT_DANGLING const std::vector<std::string>& get_binary_paths(const std::string& type);
463 
464 /**
465  * Returns a complete path to the actual file of a given @a type, if it exists.
466  */
467 utils::optional<std::string> get_binary_file_location(const std::string& type, const std::string& filename);
468 
469 /**
470  * Returns a complete path to the actual directory of a given @a type, if it exists.
471  */
472 utils::optional<std::string> get_binary_dir_location(const std::string &type, const std::string &filename);
473 
474 /**
475  * Returns a translated path to the actual file or directory, if it exists. @a current_dir is needed to resolve a path starting with ".".
476  */
477 utils::optional<std::string> get_wml_location(const std::string& path, const utils::optional<std::string>& current_dir = utils::nullopt);
478 
479 /**
480  * Returns a short path to @a filename, skipping the (user) data directory.
481  */
482 std::string get_short_wml_path(const std::string &filename);
483 
484 /**
485  * Returns an asset path to @a filename for binary path-independent use in saved games.
486  *
487  * Example:
488  * images, units/konrad-fighter.png ->
489  * data/campaigns/Heir_To_The_Throne/images/units/konrad-fighter.png
490  */
491 utils::optional<std::string> get_independent_binary_file_path(const std::string& type, const std::string &filename);
492 
493 /**
494  * Returns the appropriate invocation for a Wesnoth-related binary, assuming
495  * that it is located in the same directory as the running wesnoth binary.
496  * This is just a string-transformation based on argv[0], so the returned
497  * program is not guaranteed to actually exist. '-debug' variants are handled
498  * correctly.
499  */
500 std::string get_program_invocation(const std::string &program_name);
501 
502 /**
503  * Returns the localized version of the given filename, if it exists.
504  */
505 utils::optional<std::string> get_localized_path(const std::string& file, const std::string& suff = "");
506 
507 /**
508  * Returns the add-on ID from a path.
509  * aka the directory directly following the "add-ons" folder, or an empty string if none is found.
510  */
511 utils::optional<std::string> get_addon_id_from_path(const std::string& location);
512 
513 }
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:158
std::vector< std::string > file_patterns_
Definition: filesystem.hpp:111
bool match_file(const std::string &name) const
void remove_blacklisted_files_and_dirs(std::vector< std::string > &files, std::vector< std::string > &directories) const
void add_file_pattern(const std::string &pattern)
Definition: filesystem.hpp:98
std::vector< std::string > directory_patterns_
Definition: filesystem.hpp:112
blacklist_pattern_list(const std::vector< std::string > &file_patterns, const std::vector< std::string > &directory_patterns)
Definition: filesystem.hpp:90
void add_directory_pattern(const std::string &pattern)
Definition: filesystem.hpp:103
bool match_dir(const std::string &name) const
A class grating read only view to a vector of config objects, viewed as one config with all children ...
Represents version numbers.
Interfaces for manipulating version numbers of engine, add-ons, etc.
#define NOT_DANGLING
Definition: global.hpp:65
bool to_asset_path(std::string &path, const std::string &addon_id, const std::string &asset_type)
Helper function to convert absolute path to wesnoth relative path.
std::string get_legacy_editor_dir()
std::string get_cache_dir()
Definition: filesystem.cpp:865
std::time_t file_modified_time(const std::string &fname)
Get the modification time of a file.
bool is_bzip2_file(const std::string &filename)
Returns true if the file ends with '.bz2'.
int dir_size(const std::string &pname)
Returns the sum of the sizes of the files contained in a directory.
bool is_relative(const std::string &path)
Returns whether the path seems to be relative.
filesystem::scoped_istream istream_file(const std::string &fname, bool treat_failure_as_error)
bool is_root(const std::string &path)
Returns whether the path is the root of the file hierarchy.
void get_files_in_dir(const std::string &dir, std::vector< std::string > *files, std::vector< std::string > *dirs, name_mode mode, filter_mode filter, reorder_mode reorder, file_tree_checksum *checksum)
Get a list of all files and/or directories in a given directory.
Definition: filesystem.cpp:446
const std::string wml_extension
Definition: filesystem.hpp:81
bool is_cfg(const std::string &filename)
Returns true if the file ends with the wmlfile extension.
static bfs::path get_dir(const bfs::path &dirpath)
Definition: filesystem.cpp:338
std::string get_user_data_dir()
Definition: filesystem.cpp:855
std::string base_name(const std::string &file, const bool remove_extension)
Returns the base filename of a file, with directory name stripped.
std::string get_wml_persist_dir()
bool rename_dir(const std::string &old_dir, const std::string &new_dir)
Definition: filesystem.cpp:798
std::string get_exe_path()
Definition: filesystem.cpp:975
void copy_file(const std::string &src, const std::string &dest)
Read a file and then writes it back out.
bool delete_file(const std::string &filename)
bool is_gzip_file(const std::string &filename)
Returns true if the file ends with '.gz'.
static bool file_exists(const bfs::path &fpath)
Definition: filesystem.cpp:327
std::unique_ptr< SDL_RWops, sdl_rwops_deleter > rwops_ptr
Definition: filesystem.hpp:61
std::string get_exe_dir()
bool is_legal_user_file_name(const std::string &name, bool allow_whitespace=true)
Returns whether the given filename is a legal name for a user-created file.
bool is_directory(const std::string &fname)
Returns true if the given file is a directory.
bool delete_directory(const std::string &dirname, const bool keep_pbl)
std::string get_synced_prefs_file()
location of preferences file containing preferences that are synced between computers note that wesno...
utils::optional< std::string > get_wml_location(const std::string &path, const utils::optional< std::string > &current_dir)
Returns a translated path to the actual file or directory, if it exists.
std::string get_saves_dir()
rwops_ptr make_read_RWops(const std::string &path)
const file_tree_checksum & data_tree_checksum(bool reset=false)
Get the time at which the data/ tree was last modified at.
std::string get_program_invocation(const std::string &program_name)
Returns the appropriate invocation for a Wesnoth-related binary, assuming that it is located in the s...
std::string read_file(const std::string &fname)
Basic disk I/O - read file.
std::string get_unsynced_prefs_file()
location of preferences file containing preferences that aren't synced between computers
std::string get_save_index_file()
const std::string map_extension
Definition: filesystem.hpp:79
bool is_compressed_file(const std::string &filename)
Definition: filesystem.hpp:294
utils::optional< std::string > get_binary_file_location(const std::string &type, const std::string &filename)
Returns a complete path to the actual file of a given type, if it exists.
filesystem::scoped_ostream ostream_file(const std::string &fname, std::ios_base::openmode mode, bool create_directory)
static bool create_directory_if_missing_recursive(const bfs::path &dirpath)
Definition: filesystem.cpp:385
int file_size(const std::string &fname)
Returns the size of a file, or -1 if the file doesn't exist.
bool is_mask(const std::string &filename)
Returns true if the file ends with the maskfile extension.
utils::optional< std::string > get_addon_id_from_path(const std::string &location)
Returns the add-on ID from a path.
std::string get_lua_history_file()
std::string autodetect_game_data_dir(std::string exe_dir)
Try to autodetect the location of the game data dir.
std::string read_file_as_data_uri(const std::string &fname)
void set_cache_dir(const std::string &newcachedir)
Definition: filesystem.cpp:818
std::string read_scenario(const std::string &name)
const std::string mask_extension
Definition: filesystem.hpp:80
std::unique_ptr< std::istream > scoped_istream
Definition: filesystem.hpp:53
void clear_binary_paths_cache()
std::string get_screenshot_dir()
std::string get_credentials_file()
void write_file(const std::string &fname, const std::string &data, std::ios_base::openmode mode)
Throws io_exception if an error occurs.
std::string get_short_wml_path(const std::string &filename)
Returns a short path to filename, skipping the (user) data directory.
std::string root_name(const std::string &path)
Returns the name of the root device if included in the given path.
std::string directory_name(const std::string &file)
Returns the directory name of a file, with filename stripped.
std::string get_logs_dir()
Definition: filesystem.cpp:860
std::unique_ptr< std::ostream > scoped_ostream
Definition: filesystem.hpp:54
static bool create_directory_if_missing(const bfs::path &dirpath)
Definition: filesystem.cpp:361
utils::optional< std::string > get_binary_dir_location(const std::string &type, const std::string &filename)
Returns a complete path to the actual directory of a given type, if it exists.
bool is_userdata_initialized()
Definition: filesystem.cpp:610
utils::optional< std::string > get_game_manual_file(const std::string &locale_code)
location of the game manual file correponding to the given locale (default: en)
Definition: filesystem.cpp:829
std::string nearest_extant_parent(const std::string &file)
Finds the nearest parent in existence for a file or directory.
char path_separator()
Returns the standard path separator for the current platform.
std::string get_sync_dir()
parent directory for everything that should be synced between systems.
bool looks_like_pbl(const std::string &file)
std::string get_addons_data_dir()
bool is_map(const std::string &filename)
Returns true if the file ends with the mapfile extension.
bool make_directory(const std::string &dirname)
utils::optional< std::string > get_independent_binary_file_path(const std::string &type, const std::string &filename)
Returns an asset path to filename for binary path-independent use in saved games.
std::string get_wesnothd_name()
std::string get_default_prefs_file()
const blacklist_pattern_list default_blacklist
Definition: filesystem.cpp:266
std::string get_addons_dir()
bool set_cwd(const std::string &dir)
Definition: filesystem.cpp:960
utils::optional< std::string > get_localized_path(const std::string &file, const std::string &suff)
Returns the localized version of the given filename, if it exists.
std::vector< other_version_dir > find_other_version_saves_dirs()
Searches for directories containing saves created by other versions of Wesnoth.
Definition: filesystem.cpp:894
rwops_ptr make_write_RWops(const std::string &path)
std::string get_next_filename(const std::string &name, const std::string &extension)
Get the next free filename using "name + number (3 digits) + extension" maximum 1000 files then start...
Definition: filesystem.cpp:587
std::string get_intl_dir()
std::string get_core_images_dir()
std::vector< uint8_t > read_file_binary(const std::string &fname)
std::string sanitize_path(const std::string &path)
Sanitizes a path to remove references to the user's name.
std::string get_current_editor_dir(const std::string &addon_id)
const std::string get_version_path_suffix(const version_info &version)
Definition: filesystem.cpp:615
bool is_path_sep(char c)
Returns whether c is a path separator.
std::string read_map(const std::string &name)
std::string get_cwd()
Definition: filesystem.cpp:947
std::string normalize_path(const std::string &fpath, bool normalize_separators, bool resolve_dot_entries)
Returns the absolute path of a file.
void set_user_data_dir(std::string newprefdir)
Definition: filesystem.cpp:722
const std::vector< std::string > & get_binary_paths(const std::string &type)
Returns a vector with all possible paths to a given type of binary, e.g.
Game configuration data as global variables.
Definition: build_info.cpp:61
std::string path
Definition: filesystem.cpp:92
std::string default_preferences_path
Definition: filesystem.cpp:98
const std::string observer_team_name
observer team name used for observer team chat
Definition: filesystem.cpp:102
int cache_compression_level
Definition: filesystem.cpp:104
bool check_migration
Definition: filesystem.cpp:100
constexpr auto filter
Definition: ranges.hpp:38
static void msg(const char *act, debug_info &i, const char *to="", const char *result="")
Definition: debugger.cpp:109
std::string_view data
Definition: picture.cpp:178
rect src
Non-transparent portion of the surface to compose.
std::string filename
Filename.
The paths manager is responsible for recording the various paths that binary files may be located at.
Definition: filesystem.hpp:440
std::vector< std::string > paths_
Definition: filesystem.hpp:453
binary_paths_manager(const binary_paths_manager &o)
binary_paths_manager & operator=(const binary_paths_manager &o)
void set_paths(const game_config_view &cfg)
bool operator==(const file_tree_checksum &rhs) const
bool operator!=(const file_tree_checksum &rhs) const
Definition: filesystem.hpp:320
An exception object used when an IO error occurs.
Definition: filesystem.hpp:67
io_exception(const std::string &msg)
Definition: filesystem.hpp:69
std::string version
Here the version is given as a string instead of a version_info, because the logic of how many compon...
Definition: filesystem.hpp:198
other_version_dir(const std::string &v, const std::string &p)
Definition: filesystem.hpp:202
void operator()(SDL_RWops *) const noexcept
Base class for all the errors encountered by the engine.
Definition: exceptions.hpp:29
mock_char c
mock_party p