2010-06-30 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / Mono.Xml / SubtreeXmlReader.cs
index 60a2c93fc96ca6f4798dcb83cd4254c2ae6f6215..38919bebb8c92ba2849590d77b119a6be7581bdf 100644 (file)
@@ -93,15 +93,15 @@ namespace Mono.Xml
                }
 
                public override bool HasValue {
-                       get { return initial ? false : Reader.HasValue; }
+                       get { return initial || eof ? false : Reader.HasValue; }
                }
 
                public override string LocalName {
-                       get { return initial ? String.Empty : Reader.LocalName; }
+                       get { return initial || eof ? String.Empty : Reader.LocalName; }
                }
 
                public override string Name {
-                       get { return initial ? String.Empty : Reader.Name; }
+                       get { return initial || eof ? String.Empty : Reader.Name; }
                }
 
                public override XmlNameTable NameTable {
@@ -109,15 +109,15 @@ namespace Mono.Xml
                }
 
                public override string NamespaceURI {
-                       get { return initial ? String.Empty : Reader.NamespaceURI; }
+                       get { return initial || eof ? String.Empty : Reader.NamespaceURI; }
                }
 
                public override XmlNodeType NodeType {
-                       get { return initial ? XmlNodeType.None : Reader.NodeType; }
+                       get { return initial || eof ? XmlNodeType.None : Reader.NodeType; }
                }
 
                public override string Prefix {
-                       get { return initial ? String.Empty : Reader.Prefix; }
+                       get { return initial || eof ? String.Empty : Reader.Prefix; }
                }
 
                public override ReadState ReadState {
@@ -140,7 +140,8 @@ namespace Mono.Xml
 
                public override void Close ()
                {
-                       // do nothing
+                       while (Read ())
+                               ;
                }
 
                public override string GetAttribute (int i)
@@ -218,8 +219,13 @@ namespace Mono.Xml
                        }
                        if (!read) {
                                read = true;
-                               return !Reader.IsEmptyElement && Reader.Read ();
+                               Reader.MoveToElement ();
+                               bool ret = !Reader.IsEmptyElement && Reader.Read ();
+                               if (!ret)
+                                       eof = true;
+                               return ret;
                        }
+                       Reader.MoveToElement ();
                        if (Reader.Depth > startDepth)
                                if (Reader.Read ())
                                        return true;