2010-06-30 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / Mono.Xml / SubtreeXmlReader.cs
index 3003351fd0333bfaed830e711f74ed8a084d9b82..38919bebb8c92ba2849590d77b119a6be7581bdf 100644 (file)
@@ -92,18 +92,16 @@ namespace Mono.Xml
                        get { return initial ? 0 : li != null ? li.LinePosition : 0; }
                }
 
-#if !NET_2_1
                public override bool HasValue {
-                       get { return initial ? false : Reader.HasValue; }
+                       get { return initial || eof ? false : Reader.HasValue; }
                }
-#endif
 
                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 {
@@ -111,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 {
@@ -142,7 +140,7 @@ namespace Mono.Xml
 
                public override void Close ()
                {
-                       while (Reader.Depth > startDepth && Read ())
+                       while (Read ())
                                ;
                }
 
@@ -221,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;
@@ -230,14 +233,12 @@ namespace Mono.Xml
                        return false;
                }
 
-#if !NET_2_1
                public override bool ReadAttributeValue ()
                {
                        if (initial || eof)
                                return false;
                        return Reader.ReadAttributeValue ();
                }
-#endif
 
                public override void ResolveEntity ()
                {