void ixmlNode_free(IXML_Node *nodeptr) { if (nodeptr != NULL) { ixmlNode_free(nodeptr->firstChild); ixmlNode_free(nodeptr->nextSibling); ixmlNode_free(nodeptr->firstAttr); ixmlNode_freeSingleNode(nodeptr); } }
/*================================================================ * ixmlDocument_createTextNodeEx * Creates an text node. * External function. * Parameters: * data: text data for the text node. It is stored in nodeValue field. * Return Value: * IXML_SUCCESS * IXML_INVALID_PARAMETER: if either doc or data is NULL * IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations. * *=================================================================*/ int ixmlDocument_createTextNodeEx( IN IXML_Document * doc, IN char *data, OUT IXML_Node ** textNode ) { IXML_Node *returnNode; int rc = IXML_SUCCESS; returnNode = NULL; //080903, JC, allow to create text node with NULL //if( ( doc == NULL ) || ( data == NULL ) ) { if( doc == NULL ) { rc = IXML_INVALID_PARAMETER; goto ErrorHandler; } returnNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) ); if( returnNode == NULL ) { rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } // initialize the node ixmlNode_init( returnNode ); returnNode->nodeName = strdup( TEXTNODENAME ); if( returnNode->nodeName == NULL ) { ixmlNode_free( returnNode ); returnNode = NULL; rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } // add in node value if( data != NULL ) { /* TODO: ok, here the data should be unescaped! */ returnNode->nodeValue = strdup( data ); /* */ if( returnNode->nodeValue == NULL ) { ixmlNode_free( returnNode ); returnNode = NULL; rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } } returnNode->nodeType = eTEXT_NODE; returnNode->ownerDocument = doc; ErrorHandler: *textNode = returnNode; return rc; }
/*================================================================ * ixmlDocument_createTextNodeEx * Creates an text node. * External function. * Parameters: * data: text data for the text node. It is stored in nodeValue field. * Return Value: * IXML_SUCCESS * IXML_INVALID_PARAMETER: if either doc or data is NULL * IXML_INSUFFICIENT_MEMORY: if not enough memory to finish this operations. * *=================================================================*/ int ixmlDocument_createTextNodeEx( IN IXML_Document * doc, IN char *data, OUT IXML_Node ** textNode ) { IXML_Node *returnNode; int rc = IXML_SUCCESS; returnNode = NULL; if( ( doc == NULL ) || ( data == NULL ) ) { rc = IXML_INVALID_PARAMETER; goto ErrorHandler; } returnNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) ); if( returnNode == NULL ) { rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } /* initialize the node */ ixmlNode_init( returnNode ); returnNode->nodeName = strdup( TEXTNODENAME ); if( returnNode->nodeName == NULL ) { ixmlNode_free( returnNode ); returnNode = NULL; rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } /* add in node value */ if( data != NULL ) { returnNode->nodeValue = strdup( data ); if( returnNode->nodeValue == NULL ) { ixmlNode_free( returnNode ); returnNode = NULL; rc = IXML_INSUFFICIENT_MEMORY; goto ErrorHandler; } } returnNode->nodeType = eTEXT_NODE; returnNode->ownerDocument = doc; ErrorHandler: *textNode = returnNode; return rc; }
/* ***************************************************************************** ** FUNCTION NAME: createElementTextNode ** ** FUNCTION INPUTS: ** @IXML_Element *parentElement: parent element ** @char *name: tag name ** @char *value: tag value ** ** FUNCTION DESCRIPTION ** This function will create element with name and value, and add to parent ** element. ** ** FUNCTION OUTPUTS: ** Returns IXML_Element pointer when success,on NULL on failed. ** ** HISTORY: ** 2008-7-2 Steven Leong Created ***************************************************************************** */ IXML_Element* createElementTextNode(IXML_Element *parentElement, char *name, char *value) { IXML_Element *element = NULL; IXML_Node *node = NULL; element = ixmlDocument_createElement(parentElement->n.ownerDocument, name); if(element == NULL){ return NULL; } if(value != NULL){ node = ixmlDocument_createTextNode(parentElement->n.ownerDocument, value); if(node == NULL){ ixmlElement_free(element); return NULL; } if(ixmlNode_appendChild((IXML_Node *)element, node) != IXML_SUCCESS){ ixmlElement_free(element); ixmlNode_free(node); return NULL; } } if(ixmlNode_appendChild((IXML_Node *)parentElement,(IXML_Node *)element)!=IXML_SUCCESS){ ixmlElement_free(element); return NULL; } return element; }
int YX_CD_GetBestMediaInfo(char *dms_ip, char *metadata, t_MEDIA_INFO *minfo) { char *dup_protocol, *transport, *mimetype, *dlna; IXML_Node *node=NULL; int ret = -1; if(!dms_ip || !metadata || !minfo) return -2; ret = s_CD_GetBestRes(dms_ip, metadata, &node); if(node) { IXML_Element*element = (IXML_Element*)node; const char* protocol = ixmlElement_getAttribute (element, "protocolInfo"); const char* uri = XMLUtil_GetElementValue (element); if (uri && protocol && s_YX_CD_CheckInfo(protocol, &dup_protocol, &transport, &mimetype, &dlna)) { s_CD_CreateMediaInfo(mimetype, element, dlna, minfo); free(dup_protocol); ret = 0; } ixmlNode_free(node); } return ret; }
/*================================================================ * ixmlElement_free * frees a element node. * External function. * *=================================================================*/ void ixmlElement_free( IN IXML_Element * element ) { if( element != NULL ) { ixmlNode_free( ( IXML_Node * ) element ); } }
int ixmlNode_removeChild( IXML_Node *nodeptr, IXML_Node *oldChild, IXML_Node **returnNode) { if (!nodeptr || !oldChild) return IXML_INVALID_PARAMETER; if (!ixmlNode_isParent(nodeptr, oldChild)) return IXML_NOT_FOUND_ERR; if (oldChild->prevSibling) oldChild->prevSibling->nextSibling = oldChild->nextSibling; if (nodeptr->firstChild == oldChild) nodeptr->firstChild = oldChild->nextSibling; if (oldChild->nextSibling) oldChild->nextSibling->prevSibling = oldChild->prevSibling; oldChild->nextSibling = NULL; oldChild->prevSibling = NULL; oldChild->parentNode = NULL; if (returnNode) *returnNode = oldChild; else ixmlNode_free(oldChild); return IXML_SUCCESS; }
void xmldb_deleteMetaInfo(IXML_Element* doc) { IXML_NodeList* list = ixmlElement_getElementsByTagName(doc, OBIX_META); if (list == NULL) { log_debug("oBIX object doesn't contain any meta information."); return; } int length = ixmlNodeList_length(list); IXML_Node* node; int error; int i; for (i = 0; i < length; i++) { node = ixmlNodeList_item(list, i); error = ixmlNode_removeChild(ixmlNode_getParentNode(node), node, &node); if (error != IXML_SUCCESS) { log_warning("Unable to clean the oBIX object from meta information " "(error %d).", error); ixmlNodeList_free(list); return; } ixmlNode_free(node); } ixmlNodeList_free(list); }
/*================================================================ * ixmlCDATASection_free * frees a CDATASection node. * External function. * *=================================================================*/ void ixmlCDATASection_free( IN IXML_CDATASection * nodeptr ) { if( nodeptr != NULL ) { ixmlNode_free( ( IXML_Node * ) nodeptr ); } }
/*================================================================ * Function: Attr_free * Frees an attribute node. * external function. * *=================================================================*/ void ixmlAttr_free( IN IXML_Attr * attr ) { if( attr != NULL ) { ixmlNode_free( ( IXML_Node * ) attr ); } }
/*================================================================ * ixmlDocument_free * It frees the whole document tree. * External function. * *=================================================================*/ void ixmlDocument_free( IN IXML_Document * doc ) { if( doc != NULL ) { ixmlNode_free( ( IXML_Node * ) doc ); doc = NULL; } }
/** * Adds provided data to the storage. * @param checkPrefix If @a TRUE than all nodes with absolute URIs will be * checked to have /obix prefix. * @return @a 0 on success; error code otherwise. */ static int xmldb_putDOMHelper(IXML_Element* data, BOOL checkPrefix) { IXML_Node* node = ixmlElement_getNode(data); IXML_Node* newNode = NULL; // shortcut for cleaning all resources if error occurs. void onError() { if (newNode != NULL) { ixmlNode_free(newNode); } } const char* href = checkNode(node, checkPrefix); if (href == NULL) { // error is already logged. onError(); return -1; } // append node to the storage int error = ixmlDocument_importNode(_storage, node, TRUE, &newNode); if (error != IXML_SUCCESS) { log_warning("Unable to write to the storage (error %d).", error); onError(); return error; } // look for available node with the same href IXML_Node* nodeInStorage = getNodeByHref(_storage, href, NULL); if (nodeInStorage != NULL) { log_warning("Unable to write to the storage: The object with the same " "URI (%s) already exists.", href); onError(); return -2; // overwrite existing node //ixmlNode_replaceChild(ixmlNode_getParentNode(nodeInStorage), // newNode, // nodeInStorage, // &nodeInStorage); //ixmlNode_free(nodeInStorage); } // append as a new node error = ixmlNode_appendChild(ixmlDocument_getNode(_storage), newNode); if (error != IXML_SUCCESS) { log_warning("Unable to write to the storage (error %d).", error); onError(); return error; } return 0; }
/*================================================================ * ixmlDocumenfree * It frees the whole document tree. * External function. * *=================================================================*/ void ixmlDocument_free( IN IXML_Document * doc ) { if( doc != NULL ) { #ifdef PSP_XSLT_SUPPORT if(doc->URL) T_free(doc->URL); if(doc->_private) T_free(doc->_private); #endif /*PSP_XSLT_SUPPORT*/ ixmlNode_free( ( IXML_Node * ) doc ); } }
int YX_CD_GetBestRes (char *dms_ip, char *metadata, char **res) { IXML_Node *node=NULL; int ret = -1; if(!dms_ip || !metadata || !res) return -2; ret = s_CD_GetBestRes(dms_ip, metadata, &node); if(node) { *res=Dlna_strdup(node->nodeValue); ixmlNode_free(node); ret = 0; } return ret; }
int xmldb_deleteMetaVariable(IXML_Node* meta) { IXML_Node* metaItem = ixmlElement_getNode( ixmlAttr_getOwnerElement( ixmlNode_convertToAttr(meta))); int error = ixmlNode_removeChild( ixmlNode_getParentNode(metaItem), metaItem, &metaItem); if (error != IXML_SUCCESS) { log_error("Unable to delete meta data: ixmlNode_removeChild() " "returned %d", error); return -1; } ixmlNode_free(metaItem); return 0; }
int YX_CD_GetBestUri (char *dms_ip, char *metadata, char **uri) { IXML_Node *node=NULL; int ret = -1; if(!dms_ip || !metadata || !uri) return -2; ret = s_CD_GetBestRes(dms_ip, metadata, &node); if(node) { IXML_Element*element = (IXML_Element*)node; const char* str = XMLUtil_GetElementValue (element); *uri=Dlna_strdup(str); ixmlNode_free(node); ret = 0; } return ret; }
int xmldb_delete(const char* href) { IXML_Node* node = getNodeByHref(_storage, href, NULL); if (node == NULL) { log_warning("Unable to delete data. Provided URI (%s) doesn't " "exist.", href); return -1; } int error = ixmlNode_removeChild(ixmlNode_getParentNode(node), node, &node); if (error != IXML_SUCCESS) { log_warning("Error occurred when deleting data (error %d).", error); return -1; } ixmlNode_free(node); return 0; }
UPnPAllowedValueRange::~UPnPAllowedValueRange() { if (node != NULL){ ixmlNode_free((IXML_Node*)node); node = NULL; } }