Exemplo n.º 1
0
Arquivo: node.c Projeto: rxwen/pupnp
IXML_NamedNodeMap *ixmlNode_getAttributes(IXML_Node *nodeptr)
{
    IXML_NamedNodeMap *returnNamedNodeMap = NULL;
    IXML_Node *tempNode;
    int rc;

    if(nodeptr == NULL) {
        return NULL;
    }

    if(nodeptr->nodeType == eELEMENT_NODE) {
        returnNamedNodeMap = (IXML_NamedNodeMap *)malloc(sizeof(IXML_NamedNodeMap));
        if(returnNamedNodeMap == NULL) {
            return NULL;
        }

        ixmlNamedNodeMap_init(returnNamedNodeMap);
        tempNode = nodeptr->firstAttr;
        while( tempNode != NULL ) {
            rc = ixmlNamedNodeMap_addToNamedNodeMap(&returnNamedNodeMap, tempNode);
            if(rc != IXML_SUCCESS) {
                ixmlNamedNodeMap_free(returnNamedNodeMap);
                return NULL;
            }

            tempNode = tempNode->nextSibling;
        }
        return returnNamedNodeMap;
    } else {
        /* if not an ELEMENT_NODE */
        return NULL;
    }
}
Exemplo n.º 2
0
/*================================================================
*   NamedNodeMap_addToNamedNodeMap
*       add a node to a NamedNodeMap.
*       Internal to parser only.
*   Parameters:
*       add: the node to add into NamedNodeMap.
*   Return:
*       IXML_SUCCESS or failure.
*
*=================================================================*/
int
ixmlNamedNodeMap_addToNamedNodeMap( IN IXML_NamedNodeMap ** nnMap,
                                    IN IXML_Node * add )
{
    IXML_NamedNodeMap *traverse = NULL,
     *p = NULL;
    IXML_NamedNodeMap *newItem = NULL;

    if( add == NULL ) {
        return IXML_SUCCESS;
    }

    if( *nnMap == NULL )        // nodelist is empty
    {
        *nnMap =
	#ifdef _UPNP_MM_
            ( IXML_NamedNodeMap * ) upnp_malloc( sizeof( IXML_NamedNodeMap ) );
	#else
            ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
	#endif
        if( *nnMap == NULL ) {
            return IXML_INSUFFICIENT_MEMORY;
        }
        ixmlNamedNodeMap_init( *nnMap );
    }

    if( ( *nnMap )->nodeItem == NULL ) {
        ( *nnMap )->nodeItem = add;
    } else {
        traverse = *nnMap;
        p = traverse;
        while( traverse != NULL ) {
            p = traverse;
            traverse = traverse->next;
        }

        newItem =
	#ifdef _UPNP_MM_
            ( IXML_NamedNodeMap * ) upnp_malloc( sizeof( IXML_NamedNodeMap ) );
	#else
            ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );
	#endif
        if( newItem == NULL ) {
            return IXML_INSUFFICIENT_MEMORY;
        }
        p->next = newItem;
        newItem->nodeItem = add;
        newItem->next = NULL;
    }

    return IXML_SUCCESS;
}