/* 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 "sys/sys.h" #include "filesystem/filesystem.h" namespace filesystem { File::File() {} File::~File() {} void File::open(const char * filename, ios_base::openmode mode) { file_name.assign(filename); std::string fn; real_name.clear(); // 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()) { real_name = fn; 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; real_name = fn; 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; real_name = fn; 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; real_name = fn; } } } // namespace common