瀏覽代碼

Actually, do move Extract(7Zip)ArchiveRedir's outer exception handling up one level. Does not add extra duplicate code and still keeps it as 6.4.3.

Martijn Laan 3 月之前
父節點
當前提交
01dc41cb81

+ 10 - 17
Projects/Src/Compression.SevenZipDLLDecoder.pas

@@ -964,25 +964,18 @@ begin
 
   LogBannerOnce;
 
-  try
-    { Open }
-    var numItems: UInt32;
-    const InArchive = OpenArchiveRedir(DisableFsRedir, ArchiveFilename, Password,
-      clsid, numItems);
+  { Open }
+  var numItems: UInt32;
+  const InArchive = OpenArchiveRedir(DisableFsRedir, ArchiveFilename, Password,
+    clsid, numItems);
 
-    { Extract }
-    const ExtractCallback: IArchiveExtractCallback =
-      TArchiveExtractAllCallback.Create(InArchive, numItems, DisableFsRedir,
-        ArchiveFilename, DestDir, Password, FullPaths, OnExtractionProgress);
-    (ExtractCallback as TArchiveExtractAllCallback).Extract;
+  { Extract }
+  const ExtractCallback: IArchiveExtractCallback =
+    TArchiveExtractAllCallback.Create(InArchive, numItems, DisableFsRedir,
+      ArchiveFilename, DestDir, Password, FullPaths, OnExtractionProgress);
+  (ExtractCallback as TArchiveExtractAllCallback).Extract;
 
-    Log('Everything is Ok'); { Just like 7zMain.c }
-  except
-    on E: EAbort do
-      raise Exception.Create(SetupMessages[msgErrorExtractionAborted])
-    else
-      raise Exception.Create(FmtSetupMessage(msgErrorExtractionFailed, [GetExceptMessage]));
-  end;
+  Log('Everything is Ok'); { Just like 7zMain.c }
 end;
 
 { ArchiveFindFirstFileRedir & co }

+ 22 - 29
Projects/Src/Compression.SevenZipDecoder.pas

@@ -351,35 +351,28 @@ begin
   LogFmt('Extracting 7-Zip archive %s to %s. Full paths? %s', [ArchiveFileName,
     RemoveBackslashUnlessRoot(DestDir), SYesNo[FullPaths]]);
 
-  try
-    if not ForceDirectories(DisableFsRedir, DestDir) then
-      SevenZipError(FmtSetupMessage1(msgErrorCreatingDir, DestDir), 'Failed to create destination directory');
-
-    State.DisableFsRedir := DisableFsRedir;
-    State.ExpandedArchiveFileName := PathExpand(ArchiveFileName);
-    State.ExpandedDestDir := AddBackslash(PathExpand(DestDir));
-    State.LogBuffer := '';
-    State.ExtractedArchiveName := PathExtractName(ArchiveFileName);
-    State.OnExtractionProgress := OnExtractionProgress;
-    State.LastReportedProgress := 0;
-    State.LastReportedProgressMax := 0;
-    State.Aborted := False;
-
-    var Res := IS_7zDec(PChar(ArchiveFileName), FullPaths);
-
-    if State.LogBuffer <> '' then
-      Log(State.LogBuffer);
-
-    if State.Aborted then
-      Abort
-    else if Res <> 0 then
-      BadResultError(Res);
-  except
-    on E: EAbort do
-      raise Exception.Create(SetupMessages[msgErrorExtractionAborted])
-    else
-      raise Exception.Create(FmtSetupMessage1(msgErrorExtractionFailed, GetExceptMessage));
-  end;
+  if not ForceDirectories(DisableFsRedir, DestDir) then
+    SevenZipError(FmtSetupMessage1(msgErrorCreatingDir, DestDir), 'Failed to create destination directory');
+
+  State.DisableFsRedir := DisableFsRedir;
+  State.ExpandedArchiveFileName := PathExpand(ArchiveFileName);
+  State.ExpandedDestDir := AddBackslash(PathExpand(DestDir));
+  State.LogBuffer := '';
+  State.ExtractedArchiveName := PathExtractName(ArchiveFileName);
+  State.OnExtractionProgress := OnExtractionProgress;
+  State.LastReportedProgress := 0;
+  State.LastReportedProgressMax := 0;
+  State.Aborted := False;
+
+  var Res := IS_7zDec(PChar(ArchiveFileName), FullPaths);
+
+  if State.LogBuffer <> '' then
+    Log(State.LogBuffer);
+
+  if State.Aborted then
+    Abort
+  else if Res <> 0 then
+    BadResultError(Res);
 end;
 
 end.

+ 12 - 5
Projects/Src/Setup.ScriptDlg.pas

@@ -1248,12 +1248,19 @@ procedure TExtractionWizardPage.Extract;
 begin
   FAbortedByUser := False;
 
-  for var A in FArchives do begin
-    { Don't need to set DownloadTemporaryFileOrExtractArchiveProcessMessages before extraction since we already process messages ourselves }
-    if SetupHeader.SevenZipLibraryName <> '' then
-      ExtractArchiveRedir(ScriptFuncDisableFsRedir, A.FileName, A.DestDir, A.Password, A.FullPaths, InternalOnExtractionProgress)
+  try
+    for var A in FArchives do begin
+      { Don't need to set DownloadTemporaryFileOrExtractArchiveProcessMessages before extraction since we already process messages ourselves }
+      if SetupHeader.SevenZipLibraryName <> '' then
+        ExtractArchiveRedir(ScriptFuncDisableFsRedir, A.FileName, A.DestDir, A.Password, A.FullPaths, InternalOnExtractionProgress)
+      else
+        Extract7ZipArchiveRedir(ScriptFuncDisableFsRedir, A.FileName, A.DestDir, A.Password, A.FullPaths, InternalOnExtractionProgress);
+    end;
+  except
+    on E: EAbort do
+      raise Exception.Create(SetupMessages[msgErrorExtractionAborted])
     else
-      Extract7ZipArchiveRedir(ScriptFuncDisableFsRedir, A.FileName, A.DestDir, A.Password, A.FullPaths, InternalOnExtractionProgress);
+      raise Exception.Create(FmtSetupMessage1(msgErrorExtractionFailed, GetExceptMessage));
   end;
 end;
 

+ 11 - 4
Projects/Src/Setup.ScriptFunc.pas

@@ -1796,10 +1796,17 @@ var
         FullDirsItemNo := PStart-3;
       end;
 
-      if SetupHeader.SevenZipLibraryName <> '' then
-        ExtractArchiveRedir(ScriptFuncDisableFsRedir, Stack.GetString(PStart), Stack.GetString(PStart-1), Password, Stack.GetBool(FullDirsItemNo), TOnExtractionProgress(Stack.GetProc(FullDirsItemNo-1, Caller)))
-      else
-        Extract7ZipArchiveRedir(ScriptFuncDisableFsRedir, Stack.GetString(PStart), Stack.GetString(PStart-1), Password, Stack.GetBool(FullDirsItemNo), TOnExtractionProgress(Stack.GetProc(FullDirsItemNo-1, Caller)));
+      try
+        if SetupHeader.SevenZipLibraryName <> '' then
+          ExtractArchiveRedir(ScriptFuncDisableFsRedir, Stack.GetString(PStart), Stack.GetString(PStart-1), Password, Stack.GetBool(FullDirsItemNo), TOnExtractionProgress(Stack.GetProc(FullDirsItemNo-1, Caller)))
+        else
+          Extract7ZipArchiveRedir(ScriptFuncDisableFsRedir, Stack.GetString(PStart), Stack.GetString(PStart-1), Password, Stack.GetBool(FullDirsItemNo), TOnExtractionProgress(Stack.GetProc(FullDirsItemNo-1, Caller)));
+      except
+        on E: EAbort do
+          raise Exception.Create(SetupMessages[msgErrorExtractionAborted])
+        else
+          raise Exception.Create(FmtSetupMessage1(msgErrorExtractionFailed, GetExceptMessage));
+      end;
     end);
     RegisterScriptFunc('DEBUGGING', procedure(const Caller: TPSExec; const OrgName: AnsiString; const Stack: TPSStack; const PStart: Cardinal)
     begin