InputStream *FSDirectory::openFile(const QString &name) { QMutexLocker locker(&m_mutex); QString path = filePath(name); FSFileSharedPtr file = m_openInputFiles.value(path).toStrongRef(); FSInputStream *input; if (file.isNull()) { m_openInputFiles.remove(path); input = FSInputStream::open(path); m_openInputFiles.insert(path, input->file()); } else { input = new FSInputStream(file); } return input; }
InputStream *FSDirectory::openFile(const QString &name) { QMutexLocker locker(&m_mutex); QString path = filePath(name); FSFileSharedPtr file = m_openInputFiles.value(path); if (m_mmap) { if (file.isNull()) { MMapInputStream* input = MMapInputStream::open(path); m_openInputFiles.insert(path, input->file()); return input; } return new MMapInputStream(file); } if (file.isNull()) { FSInputStream* input = FSInputStream::open(path); m_openInputFiles.insert(path, input->file()); return input; } return new FSInputStream(file); }