diff options
Diffstat (limited to 'src/filesystem/file.cc')
-rw-r--r-- | src/filesystem/file.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/filesystem/file.cc b/src/filesystem/file.cc new file mode 100644 index 0000000..7f33337 --- /dev/null +++ b/src/filesystem/file.cc @@ -0,0 +1,63 @@ +/* + fs/file.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +// project headers +#include "common/common.h" +#include "filesystem/filesystem.h" + +namespace filesystem { + +void File::open(const char * filename, ios_base::openmode mode) { + file_name.assign(filename); + std::string fn; + + // if moddir is set, try the mods subdir first + if (moddir.size()) { + // try homedir + moddir + fn = homedir; + fn.append(moddir); + fn.append(filename); + std::ifstream::open(fn.c_str(), mode); + if (this->is_open()) { + con_debug << "File opened " << fn << std::endl; + return; + } + + // try datadir + moddir + fn = datadir; + fn.append(moddir); + std::ifstream::open(fn.c_str(), mode); + if (this->is_open()) { + con_debug << "File opened " << fn << std::endl; + return; + } + } + + // try homedir + basedir + fn = homedir; + fn.append(basedir); + fn.append(filename); + std::ifstream::open(fn.c_str(), mode); + if (this->is_open()) { + con_debug << "File opened " << fn << std::endl; + return; + } + + // try datadir + basedir + fn = datadir; + fn.append(basedir); + fn.append(filename); + std::ifstream::open(fn.c_str(), mode); + + if (!this->is_open()) { + con_warn << "Could not open " << filename << std::endl; + } else { + con_debug << "File opened " << fn << std::endl; + } +} + +} // namespace common + |