void SFVReader::load(const string& fileName) throw() { #ifdef _WIN32 string path = Util::getFilePath(fileName); string fname = Util::getFileName(fileName); WIN32_FIND_DATA fd; HANDLE hf = FindFirstFile(Text::toT(path + "*.sfv").c_str(), &fd); if(hf == INVALID_HANDLE_VALUE) { return; } do { try { if(tryFile(path + Text::fromT(fd.cFileName), fname)) { FindClose(hf); return; } } catch(const FileException&) { // Ignore... } } while(FindNextFile(hf, &fd)); FindClose(hf); #endif }
void SFVReader::load(const string& fileName) throw() { string path = Util::getFilePath(fileName); string fname = Util::getFileName(fileName); StringList files = File::findFiles(path, "*.sfv"); for(StringIter i = files.begin(); i != files.end(); ++i) { try { if (tryFile(*i, fname)) { return; } } catch(const FileException&) { // Ignore... } } }
/** * tryFile is a pointer to a function that resolve_include() will use to * determine if a path references a real file. ctx is a pointer to some context * information that will be passed through to tryFile. (It's a hacky closure) */ String resolve_include(const String& file, const char* currentDir, bool (*tryFile)(const String& file, void*), void* ctx) { const char* c_file = file.data(); if (!File::IsPlainFilePath(file)) { // URIs don't have an include path if (tryFile(file, ctx)) { return file; } } else if (c_file[0] == '/') { String can_path(FileUtil::canonicalize(file.c_str(), file.size()), AttachString); if (tryFile(can_path, ctx)) { return can_path; } } else if ((c_file[0] == '.' && (c_file[1] == '/' || ( c_file[1] == '.' && c_file[2] == '/')))) { String path(String(g_context->getCwd() + "/" + file)); String can_path(FileUtil::canonicalize(path.c_str(), path.size()), AttachString); if (tryFile(can_path, ctx)) { return can_path; } } else { auto includePaths = ThreadInfo::s_threadInfo.getNoCheck()-> m_reqInjectionData.getIncludePaths(); unsigned int path_count = includePaths.size(); for (int i = 0; i < (int)path_count; i++) { String path(""); String includePath(includePaths[i]); if (includePath[0] != '/') { path += (g_context->getCwd() + "/"); } path += includePath; if (path[path.size() - 1] != '/') { path += "/"; } path += file; String can_path(FileUtil::canonicalize(path.c_str(), path.size()), AttachString); if (tryFile(can_path, ctx)) { return can_path; } } if (currentDir[0] == '/') { String path(currentDir); path += "/"; path += file; String can_path(FileUtil::canonicalize(path.c_str(), path.size()), AttachString); if (tryFile(can_path, ctx)) { return can_path; } } else { String path(g_context->getCwd() + "/" + currentDir + file); String can_path(FileUtil::canonicalize(path.c_str(), path.size()), AttachString); if (tryFile(can_path, ctx)) { return can_path; } } } return String(); }