Browse Source

* Fix from stephano to fix writing empty string values twice

git-svn-id: trunk@17175 -
michael 14 years ago
parent
commit
dcc8afeb8b
1 changed files with 18 additions and 16 deletions
  1. 18 16
      packages/fcl-registry/src/xmlreg.pp

+ 18 - 16
packages/fcl-registry/src/xmlreg.pp

@@ -352,22 +352,24 @@ begin
     begin
     begin
     Node[SType]:=IntToStr(Ord(DataType));
     Node[SType]:=IntToStr(Ord(DataType));
     DataNode:=Node.FirstChild;
     DataNode:=Node.FirstChild;
-    Result:=DataNode<>Nil;  // Bug 9879. Create child here?
-    If Result Then
-      begin 
-        Case DataType of
-          dtDWORD : DataNode.NodeValue:=IntToStr(PCardinal(@Data)^);
-          dtString : begin
-                     SetLength(S,DataSize);
-                     If (DataSize>0) then
-                       Move(Data,S[1],DataSize);
-                     DataNode.NodeValue:=S;
-                     end;
-          dtBinary : begin
-                     S:=BufToHex(Data,DataSize);
-                     DataNode.NodeValue:=S;
-                     end;
-        end;
+    // Reading <value></value> results in <value/>, i.e. no subkey exists any more. Create textnode.
+    if (DataNode=nil) then
+      begin
+      DataNode:=FDocument.CreateTextNode('');
+      Node.AppendChild(DataNode);
+      end;
+    Case DataType of
+      dtDWORD : DataNode.NodeValue:=IntToStr(PCardinal(@Data)^);
+      dtString : begin
+                 SetLength(S,DataSize);
+                 If (DataSize>0) then
+                   Move(Data,S[1],DataSize);
+                 DataNode.NodeValue:=S;
+                 end;
+      dtBinary : begin
+                 S:=BufToHex(Data,DataSize);
+                 DataNode.NodeValue:=S;
+                 end;
       end;
       end;
     end;
     end;
   If Result then
   If Result then