Index: xmlreader.c
===================================================================
RCS file: /cvs/gnome/libxml2/xmlreader.c,v
retrieving revision 1.118
diff -u -r1.118 xmlreader.c
--- xmlreader.c	1 Apr 2005 13:11:52 -0000	1.118
+++ xmlreader.c	15 Jun 2005 14:24:01 -0000
@@ -1613,8 +1613,31 @@
  */
 xmlChar *
 xmlTextReaderReadInnerXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
-    TODO
-    return(NULL);
+    xmlChar *resbuf;
+    xmlNodePtr node,cur_node;
+    xmlBufferPtr buff, buff2;
+    xmlDocPtr doc;
+
+    if( xmlTextReaderExpand(reader) == -1 ) {
+    	return NULL;
+    }
+    doc = reader->doc;
+    buff = xmlBufferCreate();
+    for(cur_node=reader->node->children;cur_node!=NULL;cur_node=cur_node->next) {
+		node = xmlDocCopyNode(cur_node, doc, 1);
+		buff2 = xmlBufferCreate();
+		if( xmlNodeDump(buff2, doc, node, 0, 0) == -1 ) {
+			xmlFreeNode(node);
+   			xmlBufferFree(buff2);
+   			xmlBufferFree(buff);
+			return NULL;
+		}
+		xmlBufferCat( buff, buff2->content);
+   		xmlFreeNode(node);
+   		xmlBufferFree(buff2);
+    }
+    resbuf = buff->content;
+    return resbuf;
 }
 
 /**
@@ -1629,8 +1652,30 @@
  */
 xmlChar *
 xmlTextReaderReadOuterXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
-    TODO
-    return(NULL);
+    xmlChar *resbuf;
+    xmlNodePtr node;
+    xmlBufferPtr buff;
+    xmlDocPtr doc;
+    
+    node = reader->node;
+    doc = reader->doc;
+    if( xmlTextReaderExpand(reader) == -1 ) {
+    	return NULL;
+    }
+    node = xmlDocCopyNode(node, doc, 1);
+    buff = xmlBufferCreate();
+    if( xmlNodeDump(buff, doc, node, 0, 0) == -1 ) {
+    	xmlFreeNode(node);
+   		xmlBufferFree(buff);
+    	return NULL;
+    }
+
+    resbuf = buff->content;
+    buff->content = NULL;
+
+    xmlFreeNode(node);
+    xmlBufferFree(buff);
+    return resbuf;
 }
 
 /**
