Browse Source

* Patch from Serge Anvarov (bug ID 35102) to reduce code duplication

git-svn-id: trunk@41952 -
michael 6 years ago
parent
commit
587397253d
1 changed files with 14 additions and 10 deletions
  1. 14 10
      packages/fcl-registry/src/winreg.inc

+ 14 - 10
packages/fcl-registry/src/winreg.inc

@@ -42,6 +42,17 @@ begin
   Result:=(S='') or (S[1]<>'\')
   Result:=(S='') or (S[1]<>'\')
 end;
 end;
 
 
+function RegDataWordToRegDataType(RD: DWORD): TRegDataType;
+begin
+  // Test in ascending because rdString is most commonly used
+  Result := Succ(Low(RegDataWords));
+  repeat
+    if RegDataWords[Result] = RD then
+      Exit;
+    Inc(Result);
+  until Result > High(Result);
+  Result := Low(RegDataWords);
+end;
 
 
 function TRegistry.sysCreateKey(Key: UnicodeString): Boolean;
 function TRegistry.sysCreateKey(Key: UnicodeString): Boolean;
 Var
 Var
@@ -95,9 +106,7 @@ begin
     Result:=-1
     Result:=-1
   else
   else
     begin
     begin
-    RegData:=High(TRegDataType);
-    While (RegData>rdUnknown) and (RD<>RegDataWords[RegData]) do
-      RegData:=Pred(RegData);
+    RegData:=RegDataWordToRegDataType(RD);
     Result:=BufSize;
     Result:=BufSize;
     end;
     end;
 end;
 end;
@@ -110,15 +119,10 @@ Var
 begin
 begin
   With Value do
   With Value do
     begin
     begin
-    FLastError:=RegQueryValueExW(fCurrentKey,PWideChar(ValueName),Nil,lpdword(@RegData),Nil,lpdword(@DataSize));
+    FLastError:=RegQueryValueExW(fCurrentKey,PWideChar(ValueName),Nil,@RD,Nil,lpdword(@DataSize));
     Result:=FLastError=ERROR_SUCCESS;
     Result:=FLastError=ERROR_SUCCESS;
     if Result then
     if Result then
-      begin
-      RD:=DWord(RegData);
-      RegData:=High(TRegDataType);
-      While (RegData>rdUnknown) and (RD<>RegDataWords[RegData]) do
-         RegData:=Pred(RegData);
-      end;
+      RegData:=RegDataWordToRegDataType(RD);
     end;
     end;
   If Not Result Then
   If Not Result Then
     begin
     begin