1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-20 04:09:16 +00:00

Allow computing md5 hashes from hsStream derived classes

(cherry picked from commit e43cb685365bfc4498b681168bab0b1357ae208c)
This commit is contained in:
2019-10-04 11:07:44 -04:00
committed by rarified
parent 638682ee39
commit e86e5c8bdd
2 changed files with 30 additions and 14 deletions

View File

@ -90,33 +90,45 @@ plMD5Checksum::plMD5Checksum( const char *fileName )
CalcFromFile( fileName ); CalcFromFile( fileName );
} }
plMD5Checksum::plMD5Checksum( hsStream* stream )
{
CalcFromStream(stream);
}
void plMD5Checksum::Clear() void plMD5Checksum::Clear()
{ {
memset( fChecksum, 0, sizeof( fChecksum ) ); memset( fChecksum, 0, sizeof( fChecksum ) );
fValid = false; fValid = false;
} }
void plMD5Checksum::CalcFromFile( const char *fileName) void plMD5Checksum::CalcFromFile( const char *fileName )
{ {
FILE *fp; hsUNIXStream s;
fValid = false; fValid = false;
if( fp = fopen(fileName, "rb" ) ) if( s.Open(fileName) )
{ {
unsigned loadLen = 1024 * 1024; CalcFromStream(&s);
Start(); s.Close();
UInt8 *buf = TRACKED_NEW UInt8[loadLen];
while(int read = fread(buf, sizeof(UInt8), loadLen, fp))
AddTo( read, buf );
delete[] buf;
Finish();
fclose(fp);
} }
} }
void plMD5Checksum::CalcFromStream( hsStream* stream )
{
UInt32 sPos = stream->GetPosition();
unsigned loadLen = 1024 * 1024;
Start();
UInt8 *buf = TRACKED_NEW UInt8[loadLen];
while(int read = stream->Read(loadLen, buf))
AddTo( read, buf );
delete[] buf;
Finish();
stream->SetPosition(sPos);
}
void plMD5Checksum::Start( void ) void plMD5Checksum::Start( void )
{ {
MD5_Init( &fContext ); MD5_Init( &fContext );

View File

@ -58,6 +58,8 @@ public:
SumStorage GetChecksum() { return fSum; } SumStorage GetChecksum() { return fSum; }
}; };
class hsStream;
class plMD5Checksum class plMD5Checksum
{ {
protected: protected:
@ -74,11 +76,13 @@ class plMD5Checksum
plMD5Checksum(); plMD5Checksum();
plMD5Checksum( const plMD5Checksum &rhs ); plMD5Checksum( const plMD5Checksum &rhs );
plMD5Checksum( const char *fileName ); plMD5Checksum( const char *fileName );
plMD5Checksum( hsStream* stream );
hsBool IsValid( void ) const { return fValid; } hsBool IsValid( void ) const { return fValid; }
void Clear(); void Clear();
void CalcFromFile( const char *fileName ); void CalcFromFile( const char *fileName );
void CalcFromStream( hsStream* stream );
void Start( void ); void Start( void );
void AddTo( UInt32 size, const UInt8 *buffer ); void AddTo( UInt32 size, const UInt8 *buffer );