Browse Source

* Fix AV errors when taking pointers of empty strings.

git-svn-id: trunk@10302 -
yury 17 years ago
parent
commit
d0aa4a7e2f
2 changed files with 9 additions and 10 deletions
  1. 3 3
      packages/fcl-registry/src/registry.pp
  2. 6 7
      packages/fcl-registry/src/winreg.inc

+ 3 - 3
packages/fcl-registry/src/registry.pp

@@ -375,7 +375,7 @@ begin
        SetLength(Result, Info.DataSize-1)
      else
        SetLength(Result, Info.DataSize);
-     GetData(Name,@Result[1],Info.DataSize,Info.RegData);
+     GetData(Name,PChar(Result),Info.DataSize,Info.RegData);
    end
   else
     result:='';
@@ -422,7 +422,7 @@ end;
 procedure TRegistry.WriteExpandString(const Name, Value: string);
 
 begin
-  PutData(Name, @Value[1], Length(Value),rdExpandString);
+  PutData(Name, PChar(Value), Length(Value),rdExpandString);
 end;
 
 procedure TRegistry.WriteFloat(const Name: string; Value: Double);
@@ -438,7 +438,7 @@ end;
 procedure TRegistry.WriteString(const Name, Value: string);
 
 begin
-  PutData(Name, @Value[1], Length(Value), rdString);
+  PutData(Name, PChar(Value), Length(Value), rdString);
 end;
 
 procedure TRegistry.MoveKey(const OldName, NewName: string; Delete: Boolean);

+ 6 - 7
packages/fcl-registry/src/winreg.inc

@@ -15,10 +15,9 @@ end;
 Function PrepKey(Const S : String) : pChar;
 
 begin
-  If (S[1]<>'\') then
-    Result:=@S[1]
-  else
-    Result:=@S[2];
+  Result:=PChar(S);
+  If Result^='\' then
+    Inc(Result);
 end;
 
 Function RelativeKey(Const S : String) : Boolean;
@@ -71,7 +70,7 @@ Var
   RD : DWord;
 
 begin
-  P := @Name[1];
+  P := PChar(Name);
   If RegQueryValueExA(fCurrentKey,P,Nil,
                       @RD,Buffer,lpdword(@BufSize))<>ERROR_SUCCESS Then
     Result:=-1
@@ -97,7 +96,7 @@ Var
   P: PChar;
 
 begin
-  P:=@ValueName[1];
+  P:=PChar(ValueName);
   With Value do
     Result:=RegQueryValueExA(fCurrentKey,P,Nil,lpdword(@RegData),Nil,lpdword(@DataSize))=ERROR_SUCCESS;
   If Not Result Then
@@ -340,7 +339,7 @@ begin
     rdInteger      : RegDataType:=REG_DWORD;
     rdBinary       : RegDataType:=REG_BINARY;
   end;
-  P:=@Name[1];
+  P:=PChar(Name);
   Result:=RegSetValueExA(fCurrentKey,P,0,RegDataType,Buffer,BufSize)=ERROR_SUCCESS;
 end;