fix: avoid QFile::readall when loading resources

This commit is contained in:
shenleban tongying 2023-10-05 23:38:57 -04:00
parent d7953873b0
commit 2bd148dcba
No known key found for this signature in database
2 changed files with 7 additions and 7 deletions

View file

@ -36,9 +36,9 @@ bool tryPossibleZipName( std::string const & name, std::string & copyTo )
void loadFromFile( std::string const & filename, std::vector< char > & data )
{
File::Class f( filename, "rb" );
QByteArray byteArray{ f.readall() };
data.reserve( byteArray.size() );
data = std::vector< char >( byteArray.cbegin(), byteArray.cend() );
auto size = f.file().size(); // QFile::size() obtains size via statx on Linux
data.resize( size );
f.read( data.data(), size );
}
void Class::open( char const * mode )
@ -82,10 +82,9 @@ Class::Class( std::string_view filename, char const * mode )
void Class::read( void * buf, qint64 size )
{
qint64 result = f.read( static_cast< char * >( buf ), size );
if ( result != size )
if ( f.read( static_cast< char * >( buf ), size ) != size ) {
throw exReadError();
}
}
size_t Class::readRecords( void * buf, qint64 size, qint64 count )

View file

@ -13,7 +13,8 @@
#include <vector>
#include <QMutex>
/// A simple wrapper over QFile with some convenient GD specific functions
/// A wrapper over QFile with some GD specific functions
/// and exception throwing which are required for older coded to work correctly
/// Consider the wrapped QFile as private implementation in the `Pimpl Idiom`
///
/// Note: this is used *only* in code related to `Dictionary::CLass` to manage dict files.