From 5eb8c4aebec9ceba26f1a5f22890610fab6150e5 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 10 Apr 2022 17:25:26 +0200 Subject: [PATCH] Avoid redundant conversion to const char* and use make_shared --- apps/niftest/niftest.cpp | 2 +- apps/openmw_test_suite/files/hash.cpp | 2 +- components/bsa/bsa_file.hpp | 2 +- components/bsa/compressedbsafile.cpp | 4 ++-- components/esm/reader.cpp | 2 +- components/esm3/esmreader.cpp | 4 ++-- components/esm4/reader.cpp | 2 +- components/esm4/reader.hpp | 10 ++++++---- components/files/constrainedfilestream.cpp | 8 +++----- components/files/constrainedfilestream.hpp | 5 ++++- components/vfs/filesystemarchive.cpp | 2 +- 11 files changed, 23 insertions(+), 20 deletions(-) diff --git a/apps/niftest/niftest.cpp b/apps/niftest/niftest.cpp index f857dbde37..8f8f9c979e 100644 --- a/apps/niftest/niftest.cpp +++ b/apps/niftest/niftest.cpp @@ -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)) { diff --git a/apps/openmw_test_suite/files/hash.cpp b/apps/openmw_test_suite/files/hash.cpp index e6dbc8f6cc..f87edd4e6e 100644 --- a/apps/openmw_test_suite/files/hash.cpp +++ b/apps/openmw_test_suite/files/hash.cpp @@ -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(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); } diff --git a/components/bsa/bsa_file.hpp b/components/bsa/bsa_file.hpp index 83e9ae954c..66c8234bbd 100644 --- a/components/bsa/bsa_file.hpp +++ b/components/bsa/bsa_file.hpp @@ -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); diff --git a/components/bsa/compressedbsafile.cpp b/components/bsa/compressedbsafile.cpp index ae8209a39a..a3f3c08864 100644 --- a/components/bsa/compressedbsafile.cpp +++ b/components/bsa/compressedbsafile.cpp @@ -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) { diff --git a/components/esm/reader.cpp b/components/esm/reader.cpp index 7fcc2cce3a..d3732abb1e 100644 --- a/components/esm/reader.cpp +++ b/components/esm/reader.cpp @@ -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)); diff --git a/components/esm3/esmreader.cpp b/components/esm3/esmreader.cpp index 2cf0cd29ce..abe6cf9d71 100644 --- a/components/esm3/esmreader.cpp +++ b/components/esm3/esmreader.cpp @@ -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) diff --git a/components/esm4/reader.cpp b/components/esm4/reader.cpp index f4fe8def68..1a8fff789a 100644 --- a/components/esm4/reader.cpp +++ b/components/esm4/reader.cpp @@ -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(); diff --git a/components/esm4/reader.hpp b/components/esm4/reader.hpp index c1bf808dd5..60676b116b 100644 --- a/components/esm4/reader.hpp +++ b/components/esm4/reader.hpp @@ -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; diff --git a/components/files/constrainedfilestream.cpp b/components/files/constrainedfilestream.cpp index b9968038d1..0beaf5facc 100644 --- a/components/files/constrainedfilestream.cpp +++ b/components/files/constrainedfilestream.cpp @@ -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::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(new ConstrainedFileStreamBuf(filename, start, length)); - return IStreamPtr(new ConstrainedFileStream(std::move(buf))); + return std::make_shared(std::make_unique(filename, start, length)); } } diff --git a/components/files/constrainedfilestream.hpp b/components/files/constrainedfilestream.hpp index bf67c7b973..b828f0f6f1 100644 --- a/components/files/constrainedfilestream.hpp +++ b/components/files/constrainedfilestream.hpp @@ -3,6 +3,8 @@ #include #include +#include +#include namespace Files { @@ -20,7 +22,8 @@ private: typedef std::shared_ptr 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::max()); } diff --git a/components/vfs/filesystemarchive.cpp b/components/vfs/filesystemarchive.cpp index 7766a74f49..839f84de57 100644 --- a/components/vfs/filesystemarchive.cpp +++ b/components/vfs/filesystemarchive.cpp @@ -78,7 +78,7 @@ namespace VFS Files::IStreamPtr FileSystemArchiveFile::open() { - return Files::openConstrainedFileStream(mPath.c_str()); + return Files::openConstrainedFileStream(mPath); } }