From 28180e6b6763e4ce5d65c02e4df5380f11e6d10a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 30 Jan 2008 17:29:25 +0000 Subject: filesystem subsystem --- src/filesystem/file.cc | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/filesystem/file.cc (limited to 'src/filesystem/file.cc') 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 + -- cgit v1.2.3