mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-25 21:41:04 +00:00
Merge branch 'constrained_file_stream' into 'master'
Avoid redundant conversion to const char* and use make_shared See merge request OpenMW/openmw!1763
This commit is contained in:
commit
cf1764f255
@ -131,7 +131,7 @@ int main(int argc, char **argv)
|
||||
if(isNIF(name))
|
||||
{
|
||||
//std::cout << "Decoding: " << name << std::endl;
|
||||
Nif::NIFFile temp_nif(Files::openConstrainedFileStream(name.c_str()),name);
|
||||
Nif::NIFFile temp_nif(Files::openConstrainedFileStream(name), name);
|
||||
}
|
||||
else if(isBSA(name))
|
||||
{
|
||||
|
@ -39,7 +39,7 @@ namespace
|
||||
std::fill_n(std::back_inserter(content), GetParam().mSize, 'a');
|
||||
std::fstream(fileName, std::ios_base::out | std::ios_base::binary)
|
||||
.write(content.data(), static_cast<std::streamsize>(content.size()));
|
||||
const auto stream = Files::openConstrainedFileStream(fileName.data(), 0, content.size());
|
||||
const auto stream = Files::openConstrainedFileStream(fileName, 0, content.size());
|
||||
EXPECT_EQ(getHash(fileName, *stream), GetParam().mHash);
|
||||
}
|
||||
|
||||
|
@ -125,7 +125,7 @@ public:
|
||||
*/
|
||||
Files::IStreamPtr getFile(const FileStruct *file)
|
||||
{
|
||||
return Files::openConstrainedFileStream (mFilename.c_str (), file->offset, file->fileSize);
|
||||
return Files::openConstrainedFileStream(mFilename, file->offset, file->fileSize);
|
||||
}
|
||||
|
||||
void addFile(const std::string& filename, std::istream& file);
|
||||
|
@ -355,7 +355,7 @@ Files::IStreamPtr CompressedBSAFile::getFile(const FileRecord& fileRecord)
|
||||
size_t size = fileRecord.getSizeWithoutCompressionFlag();
|
||||
size_t uncompressedSize = size;
|
||||
bool compressed = fileRecord.isCompressed(mCompressedByDefault);
|
||||
Files::IStreamPtr streamPtr = Files::openConstrainedFileStream(mFilename.c_str(), fileRecord.offset, size);
|
||||
Files::IStreamPtr streamPtr = Files::openConstrainedFileStream(mFilename, fileRecord.offset, size);
|
||||
std::istream* fileStream = streamPtr.get();
|
||||
if (mEmbeddedFileNames)
|
||||
{
|
||||
@ -458,7 +458,7 @@ void CompressedBSAFile::convertCompressedSizesToUncompressed()
|
||||
continue;
|
||||
}
|
||||
|
||||
Files::IStreamPtr dataBegin = Files::openConstrainedFileStream(mFilename.c_str(), fileRecord.offset, fileRecord.getSizeWithoutCompressionFlag());
|
||||
Files::IStreamPtr dataBegin = Files::openConstrainedFileStream(mFilename, fileRecord.offset, fileRecord.getSizeWithoutCompressionFlag());
|
||||
|
||||
if (mEmbeddedFileNames)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ namespace ESM
|
||||
{
|
||||
Reader* Reader::getReader(const std::string &filename)
|
||||
{
|
||||
Files::IStreamPtr esmStream(Files::openConstrainedFileStream (filename.c_str ()));
|
||||
Files::IStreamPtr esmStream(Files::openConstrainedFileStream(filename));
|
||||
|
||||
std::uint32_t modVer = 0; // get the first 4 bytes of the record header only
|
||||
esmStream->read((char*)&modVer, sizeof(modVer));
|
||||
|
@ -93,7 +93,7 @@ void ESMReader::openRaw(Files::IStreamPtr _esm, const std::string& name)
|
||||
|
||||
void ESMReader::openRaw(const std::string& filename)
|
||||
{
|
||||
openRaw(Files::openConstrainedFileStream(filename.c_str()), filename);
|
||||
openRaw(Files::openConstrainedFileStream(filename), filename);
|
||||
}
|
||||
|
||||
void ESMReader::open(Files::IStreamPtr _esm, const std::string &name)
|
||||
@ -110,7 +110,7 @@ void ESMReader::open(Files::IStreamPtr _esm, const std::string &name)
|
||||
|
||||
void ESMReader::open(const std::string &file)
|
||||
{
|
||||
open (Files::openConstrainedFileStream (file.c_str ()), file);
|
||||
open (Files::openConstrainedFileStream(file), file);
|
||||
}
|
||||
|
||||
std::string ESMReader::getHNOString(NAME name)
|
||||
|
@ -210,7 +210,7 @@ void Reader::buildLStringIndex(const std::string& stringFile, LocalizedStringTyp
|
||||
sp.type = stringType;
|
||||
|
||||
// TODO: possibly check if the resource exists?
|
||||
Files::IStreamPtr filestream = Files::IStreamPtr(Files::openConstrainedFileStream(stringFile.c_str()));
|
||||
Files::IStreamPtr filestream = Files::IStreamPtr(Files::openConstrainedFileStream(stringFile));
|
||||
|
||||
filestream->seekg(0, std::ios::end);
|
||||
std::size_t fileSize = filestream->tellg();
|
||||
|
@ -128,12 +128,14 @@ namespace ESM4 {
|
||||
~Reader();
|
||||
|
||||
// FIXME: should be private but ESMTool uses it
|
||||
void openRaw(const std::string& filename) {
|
||||
openRaw(Files::openConstrainedFileStream(filename.c_str()), filename);
|
||||
void openRaw(const std::string& filename)
|
||||
{
|
||||
openRaw(Files::openConstrainedFileStream(filename), filename);
|
||||
}
|
||||
|
||||
void open(const std::string& filename) {
|
||||
open(Files::openConstrainedFileStream (filename.c_str ()), filename);
|
||||
void open(const std::string& filename)
|
||||
{
|
||||
open(Files::openConstrainedFileStream(filename), filename);
|
||||
}
|
||||
|
||||
void close() final;
|
||||
|
@ -27,7 +27,7 @@ namespace Files
|
||||
ConstrainedFileStreamBuf(const std::string &fname, size_t start, size_t length)
|
||||
{
|
||||
mFile.open (fname.c_str ());
|
||||
mSize = length != 0xFFFFFFFF ? length : mFile.size () - start;
|
||||
mSize = length != std::numeric_limits<std::size_t>::max() ? length : mFile.size () - start;
|
||||
|
||||
if (start != 0)
|
||||
mFile.seek(start);
|
||||
@ -109,10 +109,8 @@ namespace Files
|
||||
{
|
||||
}
|
||||
|
||||
IStreamPtr openConstrainedFileStream(const char *filename,
|
||||
size_t start, size_t length)
|
||||
IStreamPtr openConstrainedFileStream(const std::string& filename, std::size_t start, std::size_t length)
|
||||
{
|
||||
auto buf = std::unique_ptr<std::streambuf>(new ConstrainedFileStreamBuf(filename, start, length));
|
||||
return IStreamPtr(new ConstrainedFileStream(std::move(buf)));
|
||||
return std::make_shared<ConstrainedFileStream>(std::make_unique<ConstrainedFileStreamBuf>(filename, start, length));
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include <istream>
|
||||
#include <memory>
|
||||
#include <limits>
|
||||
#include <string>
|
||||
|
||||
namespace Files
|
||||
{
|
||||
@ -20,7 +22,8 @@ private:
|
||||
|
||||
typedef std::shared_ptr<std::istream> IStreamPtr;
|
||||
|
||||
IStreamPtr openConstrainedFileStream(const char *filename, size_t start=0, size_t length=0xFFFFFFFF);
|
||||
IStreamPtr openConstrainedFileStream(const std::string& filename, std::size_t start = 0,
|
||||
std::size_t length = std::numeric_limits<std::size_t>::max());
|
||||
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ namespace VFS
|
||||
|
||||
Files::IStreamPtr FileSystemArchiveFile::open()
|
||||
{
|
||||
return Files::openConstrainedFileStream(mPath.c_str());
|
||||
return Files::openConstrainedFileStream(mPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user