Browse Source

Don't store the key names in TSetupISSigKeyEntry but separately. Also some other cleanup.

Martijn Laan 4 months ago
parent
commit
9a737ff209
2 changed files with 31 additions and 10 deletions
  1. 29 8
      Projects/Src/Compiler.SetupCompiler.pas
  2. 2 2
      Projects/Src/Shared.Struct.pas

+ 29 - 8
Projects/Src/Compiler.SetupCompiler.pas

@@ -89,7 +89,8 @@ type
 
     FileLocationEntryFilenames: THashStringList;
     FileLocationEntryExtraInfos: TList;
-    ISSigKeysNames: THashStringList;
+    ISSigKeyEntryNames: THashStringList;
+    ISSigKeyEntryExtraInfos: TList;
     WarningsList: THashStringList;
     ExpectedCustomMessageNames: TStringList;
     MissingMessagesWarning, MissingRunOnceIdsWarning, MissingRunOnceIds, NotRecognizedMessagesWarning, UsedUserAreasWarning: Boolean;
@@ -311,6 +312,15 @@ type
     Name, Command: String;
   end;
 
+const
+  ISSigKeyEntryExtraInfoStrings = 1;
+  ISSigKeyEntryExtraInfoAnsiStrings = 0;
+type
+  PISSigKeyEntryExtraInfo = ^TISSigKeyEntryExtraInfo;
+  TISSigKeyEntryExtraInfo = record
+    Name: String;
+  end;
+
 const
   FileLocationEntryExtraInfoStrings = 1;
   FileLocationEntryExtraInfoAnsiStrings = 0;
@@ -381,8 +391,9 @@ begin
   UninstallRunEntries := TLowFragList.Create;
   FileLocationEntryFilenames := THashStringList.Create;
   FileLocationEntryExtraInfos := TLowFragList.Create;
-  ISSigKeysNames := THashStringList.Create;
-  ISSigKeysNames.IgnoreDuplicates := True;
+  ISSigKeyEntryNames := THashStringList.Create;
+  ISSigKeyEntryNames.IgnoreDuplicates := True;
+  ISSIgKeyEntryExtraInfos := TLowFragList.Create;
   WarningsList := THashStringList.Create;
   WarningsList.IgnoreDuplicates := True;
   ExpectedCustomMessageNames := TStringList.Create;
@@ -430,7 +441,8 @@ begin
   UsedUserAreas.Free;
   ExpectedCustomMessageNames.Free;
   WarningsList.Free;
-  ISSigKeysNames.Free;
+  ISSigKeyEntryExtraInfos.Free;
+  ISSigKeyEntryNames.Free;
   FileLocationEntryExtraInfos.Free;
   FileLocationEntryFilenames.Free;
   UninstallRunEntries.Free;
@@ -4493,19 +4505,25 @@ const
 var
   Values: array[TParam] of TParamValue;
   NewISSigKeyEntry: PSetupISSigKeyEntry;
+  NewISSigKeyEntryExtraInfo: PISSigKeyEntryExtraInfo;
 begin
   ExtractParameters(Line, ParamInfo, Values);
 
-  NewISSigKeyEntry := AllocMem(SizeOf(TSetupISSigKeyEntry));
+  NewISSigKeyEntry := nil;
+  NewISSigKeyEntryExtraInfo := nil;
   try
-    with NewISSigKeyEntry^ do begin
+    NewISSigKeyEntryExtraInfo := AllocMem(SizeOf(TISSigKeyEntryExtraInfo));
+    with NewISSigKeyEntryExtraInfo^ do begin
       { Name }
       if not IsValidIdentString(Values[paName].Data, False, False) then
         AbortCompile(SCompilerLanguagesOrISSigKeysBadName);
       Name := LowerCase(Values[paName].Data);
-      if ISSigKeysNames.Add(Name) = -1 then
+      if ISSigKeyEntryNames.Add(Name) = -1 then
         AbortCompileFmt(SCompilerISSigKeysNameDuplicated, [Name]);
+    end;
 
+    NewISSigKeyEntry := AllocMem(SizeOf(TSetupISSigKeyEntry));
+    with NewISSigKeyEntry^ do begin
       { KeyFile & PublicX & PublicY }
       var KeyFile := PrependSourceDirName(Values[paKeyFile].Data);
       PublicX := Values[paPublicX].Data;
@@ -4557,9 +4575,11 @@ begin
     end;
   except
     SEFreeRec(NewISSigKeyEntry, SetupISSigKeyEntryStrings, SetupISSigKeyEntryAnsiStrings);
+    SEFreeRec(NewISSigKeyEntryExtraInfo, ISSigKeyEntryExtraInfoStrings, ISSigKeyEntryExtraInfoAnsiStrings);
     raise;
   end;
   ISSigKeyEntries.Add(NewISSigKeyEntry);
+  ISSigKeyEntryExtraInfos.Add(NewISSigKeyEntryExtraInfo);
 end;
 
 procedure TSetupCompiler.EnumFilesProc(const Line: PChar; const Ext: Integer);
@@ -8193,7 +8213,6 @@ begin
     CallPreprocessorCleanupProc;
     UsedUserAreas.Clear;
     WarningsList.Clear;
-    ISSigKeysNames.Clear;
     { Free all the data }
     DecompressorDLL.Free;
     SetupE32.Free;
@@ -8218,6 +8237,8 @@ begin
     FreeListItems(UninstallRunEntries, SetupRunEntryStrings, SetupRunEntryAnsiStrings);
     FileLocationEntryFilenames.Clear;
     FreeListItems(FileLocationEntryExtraInfos, FileLocationEntryExtraInfoStrings, FileLocationEntryExtraInfoAnsiStrings);
+    ISSigKeyEntryNames.Clear;
+    FreeListItems(ISSigKeyEntryExtraInfos, ISSigKeyEntryExtraInfoStrings, ISSigKeyEntryExtraInfoAnsiStrings);
     FreeLineInfoList(ExpectedCustomMessageNames);
     FreeLangData;
     FreePreLangData;

+ 2 - 2
Projects/Src/Shared.Struct.pas

@@ -218,12 +218,12 @@ type
       doUninsAlwaysUninstall, doSetNTFSCompression, doUnsetNTFSCompression);
   end;
 const
-  SetupISSigKeyEntryStrings = 3;
+  SetupISSigKeyEntryStrings = 2;
   SetupISSigKeyEntryAnsiStrings = 0;
 type
   PSetupISSigKeyEntry = ^TSetupISSigKeyEntry;
   TSetupISSigKeyEntry = packed record
-    Name, PublicX, PublicY: String;
+    PublicX, PublicY: String;
   end;
 const
   SetupFileEntryStrings = 10;