summaryrefslogtreecommitdiff
path: root/UChecksum.pas
diff options
context:
space:
mode:
Diffstat (limited to 'UChecksum.pas')
-rw-r--r--UChecksum.pas21
1 files changed, 10 insertions, 11 deletions
diff --git a/UChecksum.pas b/UChecksum.pas
index 35bb7a1..9bd2aaf 100644
--- a/UChecksum.pas
+++ b/UChecksum.pas
@@ -63,7 +63,7 @@ var
implementation
-uses ULocale, UCoreUtils, ULibc, UCore, DateUtils;
+uses ULocale, UCoreUtils, ULibc, UCore, DateUtils, md5, crc;
type TFileListItem = class
public
@@ -210,7 +210,7 @@ begin
i := integer(Application.MessageBox(Format(LANGTheFileSYouAreTryingToOpenIsQuiteBig, [StrToUTF8(ExtractFileName(FileName))]), [mbYes, mbNo], mbWarning, mbNone, mbNo));
if (i = integer(mbNo)) or (i = 251) then Exit;
end;
- IsMD5 := (Pos('MD5', WideUpperCase(FileName)) > 0) or ((Pos('SFV', WideUpperCase(FileName)) = 0) and (Pos('SUM', WideUpperCase(FileName)) > 0));
+ IsMD5 := (Pos('MD5', WideUpperCase(ExtractFileName(FileName))) > 0) or ((Pos('SFV', WideUpperCase(ExtractFileName(FileName))) = 0) and (Pos('SUM', WideUpperCase(ExtractFileName(FileName))) > 0));
if IsMD5 then MD5Present := True
else SFVPresent := True;
if MD5Present and SFVPresent then FileList.Columns[1].Caption := 'CRC32/MD5'
@@ -377,7 +377,8 @@ var i, Error, Count: integer;
Data: TFileListItem;
Time1, Time2: TDateTime;
CRC: LongWord;
- MD5Hash: THash_MD5;
+ MDContext: TMDContext;
+ MDDigest: TMDDigest;
begin
if List.Count = 0 then Exit;
CheckButton.Caption := LANGCheckButtonCaptionStop;
@@ -411,9 +412,8 @@ begin
FileList.Items[i].SetCursor(0, False, False, 0, 0);
Application.ProcessMessages;
Data := List[i];
- CRC := $FFFFFFFF;
- MD5Hash := nil;
- if Data.IsMD5 then MD5Hash := THash_MD5.Create;
+ CRC := 0;
+ if Data.IsMD5 then MDInit(MDContext, MD_VERSION_5);
Error := 0;
FD := Engine.OpenFile(Data.FullPath, omRead, Error);
if Error <> 0 then begin
@@ -428,17 +428,16 @@ begin
Continue;
end;
if not Data.IsMD5 then CRC := CRC32(CRC, Buffer, Count)
- else MD5Hash.Calc(Buffer^, Count);
+ else MDUpdate(MDContext, Buffer^, Count);
ProgressBar.Value := ProgressBar.Value + Count;
ProgressBar.Text := Format('%d %%', [Trunc(ProgressBar.Fraction * 100)]);
Application.ProcessMessages;
until (Count < ChksumBlockSize) or Stop;
if Stop then Break;
Engine.CloseFile(FD);
- if not Data.IsMD5 then Data.Status := Ord(not ((not CRC) = Data.CRC)) + 1 else begin
- MD5Hash.Done;
- Data.Status := Ord(AnsiCompareText(Data.MD5, MD5Hash.GetKeyStrH) <> 0) + 1;
- MD5Hash.Free;
+ if not Data.IsMD5 then Data.Status := Ord(not (CRC = Data.CRC)) + 1 else begin
+ MDFinal(MDContext, MDDigest);
+ Data.Status := Ord(AnsiCompareText(Data.MD5, MDPrint(MDDigest)) <> 0) + 1;
end;
if Data.Status in [2, 3] then MarkAsBad(Data.FullPath);
end;