UPnPsdk 0.1
Universal Plug and Play +, Software Development Kit
 
Loading...
Searching...
No Matches
namedNodeMap.cpp
Go to the documentation of this file.
1/**************************************************************************
2 *
3 * Copyright (c) 2000-2003 Intel Corporation
4 * All rights reserved.
5 * Copyright (c) 2012 France Telecom All rights reserved.
6 * Copyright (C) 2022 GPL 3 and higher by Ingo Höft, <Ingo@Hoeft-online.de>
7 * Redistribution only with this Copyright remark. Last modified: 2026-03-31
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * - Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 * - Neither name of Intel Corporation nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
29 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 *
33 **************************************************************************/
34// Last compare with ./Pupnp source file, based on 2026-03-16, ver 1.14.30
35
40#include <ixml/ixmlparser.hpp>
41
42#include <cassert>
43// #include <stdlib.h> /* for free(), malloc() */
44#include <cstring>
45
49static unsigned long ixmlNamedNodeMap_getItemNumber(
51 IXML_NamedNodeMap* nnMap,
53 const char* name) {
54 IXML_Node* tempNode;
55 unsigned long returnItemNo = 0lu;
56
57 assert(nnMap && name);
58 if (!nnMap || !name) {
59 return (unsigned long)IXML_INVALID_ITEM_NUMBER;
60 }
61
62 tempNode = nnMap->nodeItem;
63 while (tempNode) {
64 if (strcmp(name, tempNode->nodeName) == 0) {
65 return returnItemNo;
66 }
67 tempNode = tempNode->nextSibling;
68 returnItemNo++;
69 }
70
71 return (unsigned long)IXML_INVALID_ITEM_NUMBER;
72}
73
75 assert(nnMap);
76
77 memset(nnMap, 0, sizeof(IXML_NamedNodeMap));
78}
79
81 const DOMString name) {
82 unsigned long index;
83
84 if (!nnMap || !name) {
85 return NULL;
86 }
87
88 index = ixmlNamedNodeMap_getItemNumber(nnMap, name);
89 if (index == (unsigned long)IXML_INVALID_ITEM_NUMBER) {
90 return NULL;
91 } else {
92 return ixmlNamedNodeMap_item(nnMap, index);
93 }
94}
95
97 /* IN */ IXML_NamedNodeMap* nnMap,
98 /* IN */ unsigned long index) {
99 IXML_Node* tempNode;
100 unsigned int i;
101
102 if (!nnMap) {
103 return NULL;
104 }
105
106 if (index > ixmlNamedNodeMap_getLength(nnMap) - 1lu) {
107 return NULL;
108 }
109
110 tempNode = nnMap->nodeItem;
111 for (i = 0u; i < index && tempNode; ++i) {
112 tempNode = tempNode->nextSibling;
113 }
114
115 return tempNode;
116}
117
119 IXML_Node* tempNode;
120 unsigned long length = 0lu;
121
122 if (nnMap) {
123 tempNode = nnMap->nodeItem;
124 for (length = 0lu; tempNode; ++length) {
125 tempNode = tempNode->nextSibling;
126 }
127 }
128
129 return length;
130}
131
133 IXML_NamedNodeMap* pNext;
134
135 while (nnMap) {
136 pNext = nnMap->next;
137 free(nnMap);
138 nnMap = pNext;
139 }
140}
141
143 IXML_Node* add) {
144 IXML_NamedNodeMap* traverse = NULL;
145 IXML_NamedNodeMap* p = NULL;
146 IXML_NamedNodeMap* newItem = NULL;
147
148 if (!add) {
149 return IXML_SUCCESS;
150 }
151
152 if (!*nnMap) {
153 /* nodelist is empty */
154 *nnMap = (IXML_NamedNodeMap*)malloc(sizeof(IXML_NamedNodeMap));
155 if (!*nnMap) {
156 return IXML_INSUFFICIENT_MEMORY;
157 }
158 ixmlNamedNodeMap_init(*nnMap);
159 }
160 if (!(*nnMap)->nodeItem) {
161 (*nnMap)->nodeItem = add;
162 } else {
163 traverse = *nnMap;
164 p = traverse;
165 while (traverse) {
166 p = traverse;
167 traverse = traverse->next;
168 }
169 newItem = (IXML_NamedNodeMap*)malloc(sizeof(IXML_NamedNodeMap));
170 if (!newItem) {
171 return IXML_INSUFFICIENT_MEMORY;
172 }
173 p->next = newItem;
174 newItem->nodeItem = add;
175 newItem->next = NULL;
176 }
177
178 return IXML_SUCCESS;
179}
Data structure common to all types of nodes.
Definition ixml.hpp:132
Data structure representing a list of named nodes.
Definition ixml.hpp:201
unsigned long ixmlNamedNodeMap_getLength(IXML_NamedNodeMap *nnMap)
Returns the number of items contained in this NamedNodeMap.
#define DOMString
The type of DOM strings.
Definition ixml.hpp:47
IXML_Node * ixmlNamedNodeMap_getNamedItem(IXML_NamedNodeMap *nnMap, const DOMString name)
Retrieves a Node from the NamedNodeMap by name.
IXML_Node * ixmlNamedNodeMap_item(IXML_NamedNodeMap *nnMap, unsigned long index)
Retrieves the index_th item in the map. If index is greater than or equal to the number of nodes in t...
void ixmlNamedNodeMap_free(IXML_NamedNodeMap *nnMap)
Frees a NamedNodeMap.
void ixmlNamedNodeMap_init(IXML_NamedNodeMap *nnMap)
Initializes a NamedNodeMap object.
int ixmlNamedNodeMap_addToNamedNodeMap(IXML_NamedNodeMap **nnMap, IXML_Node *add)
Add a node to a NamedNodeMap.
static unsigned long ixmlNamedNodeMap_getItemNumber(IXML_NamedNodeMap *nnMap, const char *name)
Return the item number of a item in NamedNodeMap.