Is this allowed by the C standard? And where is this documented?

On Mon, 2013-04-29 at 08:14 +0400, Nikolay Sivov wrote:
> On 4/29/2013 07:59, Nikita Churaev wrote:
> > No it's not.
> >
> > http://xmlsoft.org/html/libxml-tree.html#xmlDoc
> >
> > http://xmlsoft.org/html/libxml-tree.html#xmlNode
> >
> > xmlDoc has int compression instead of xmlNode's xmlNs
> I see what you mean. All node types are using same layout containing basic
> stuff to link node in a tree - up to 'doc' field. That's what a comment 
> in tree.h means:
> 
> ---
> struct _xmlNode {
>      void           *_private;    /* application data */
>      xmlElementType   type;    /* type number, must be second ! */
>      const xmlChar   *name;      /* the name of the node, or the entity */
>      struct _xmlNode *children;    /* parent->childs link */
>      struct _xmlNode *last;    /* last child link */
>      struct _xmlNode *parent;    /* child->parent link */
>      struct _xmlNode *next;    /* next sibling link  */
>      struct _xmlNode *prev;    /* previous sibling link  */
>      struct _xmlDoc  *doc;    /* the containing document */
> 
>      /* End of common part */
> ---
> 
> So to be clean with casting it should have some sort of header struct 
> containing these fields only,
> and have every node type start with this header, it's just not done this 
> way. To be safe you always
> need to check type and cast appropriately.
> >
> > On Mon, 2013-04-29 at 07:48 +0400, Nikolay Sivov wrote:
> >> On 4/29/2013 07:30, Nikita Churaev wrote:
> >>> #include <libxml/parser.h>
> >>> #include <libxml/tree.h>
> >>> #include <stdio.h>
> >>>
> >>> int
> >>> main (int argc, char** argv)
> >>> {
> >>>     xmlDocPtr doc = xmlReadMemory("<doc/>", 6, "egg.xml", NULL, 0);
> >>>
> >>>                     /* XmlNode */            /* XmlDoc */
> >>>     printf("%s\n", (doc->children->parent == doc) ? "true" : "false");
> >>>     return 0;
> >>> }
> >>>
> >>> This gives out "true"... Why? xmlNode.parent is xmlNodePtr... So I can't
> >>> just rely on xmlNode pointers to actually point to xmlNode?
> >> Just take a look what xmlDocPtr actually is - document is also a node.
> >>>    I looked all
> >>> around the API reference and tutorials and found nothing on this topic.
> >>>
> >>> _______________________________________________
> >>> xml mailing list, project page  http://xmlsoft.org/
> >>> xml@gnome.org
> >>> https://mail.gnome.org/mailman/listinfo/xml
> >>>
> >> _______________________________________________
> >> xml mailing list, project page  http://xmlsoft.org/
> >> xml@gnome.org
> >> https://mail.gnome.org/mailman/listinfo/xml
> >
> > _______________________________________________
> > xml mailing list, project page  http://xmlsoft.org/
> > xml@gnome.org
> > https://mail.gnome.org/mailman/listinfo/xml
> >
> 
> _______________________________________________
> xml mailing list, project page  http://xmlsoft.org/
> xml@gnome.org
> https://mail.gnome.org/mailman/listinfo/xml


_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to