comparison src/xmlnode.c @ 8262:b5dbd1839716

[gaim-migrate @ 8985] this is jabber new-style file transfer receive support. this doesn't do much error checking or handling, but I managed to send pictures to myself from Exodus on my laptop in the living room, which would have taken twice as long were it not for VNC. i said i was going to bed 1, 2, and 3 hours ago. i should go to bed. committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Sun, 15 Feb 2004 10:11:38 +0000
parents b55b70aef314
children 35f69749b226
comparison
equal deleted inserted replaced
8261:7b57c3bd9db6 8262:b5dbd1839716
181 g_free(node->data); 181 g_free(node->data);
182 g_free(node); 182 g_free(node);
183 } 183 }
184 184
185 xmlnode* 185 xmlnode*
186 xmlnode_get_child(xmlnode *parent, const char *name) 186 xmlnode_get_child_with_namespace(xmlnode *parent, const char *name, const char *ns)
187 { 187 {
188 xmlnode *x, *ret = NULL; 188 xmlnode *x, *ret = NULL;
189 char **names; 189 char **names;
190 char *parent_name, *child_name; 190 char *parent_name, *child_name;
191 191
194 names = g_strsplit(name, "/", 2); 194 names = g_strsplit(name, "/", 2);
195 parent_name = names[0]; 195 parent_name = names[0];
196 child_name = names[1]; 196 child_name = names[1];
197 197
198 for(x = parent->child; x; x = x->next) { 198 for(x = parent->child; x; x = x->next) {
199 if(x->type == XMLNODE_TYPE_TAG && name && !strcmp(parent_name, x->name)) { 199 const char *xmlns = NULL;
200 if(ns)
201 xmlns = xmlnode_get_attrib(x, "xmlns");
202
203 if(x->type == XMLNODE_TYPE_TAG && name && !strcmp(parent_name, x->name)
204 && (!ns || (xmlns && !strcmp(ns, xmlns)))) {
200 ret = x; 205 ret = x;
201 break; 206 break;
202 } 207 }
203 } 208 }
204 209
205 if(child_name && ret) 210 if(child_name && ret)
206 ret = xmlnode_get_child(x, child_name); 211 ret = xmlnode_get_child(ret, child_name);
207 212
208 g_strfreev(names); 213 g_strfreev(names);
209 return ret; 214 return ret;
215 }
216
217 xmlnode*
218 xmlnode_get_child(xmlnode *parent, const char *name)
219 {
220 return xmlnode_get_child_with_namespace(parent, name, NULL);
210 } 221 }
211 222
212 char * 223 char *
213 xmlnode_get_data(xmlnode *node) 224 xmlnode_get_data(xmlnode *node)
214 { 225 {
414 return ret; 425 return ret;
415 } 426 }
416 427
417 xmlnode *xmlnode_get_next_twin(xmlnode *node) { 428 xmlnode *xmlnode_get_next_twin(xmlnode *node) {
418 xmlnode *sibling; 429 xmlnode *sibling;
430 const char *ns = xmlnode_get_attrib(node, "xmlns");
419 431
420 g_return_val_if_fail(node != NULL, NULL); 432 g_return_val_if_fail(node != NULL, NULL);
421 g_return_val_if_fail(node->type == XMLNODE_TYPE_TAG, NULL); 433 g_return_val_if_fail(node->type == XMLNODE_TYPE_TAG, NULL);
422 434
423 for(sibling = node->next; sibling; sibling = sibling->next) { 435 for(sibling = node->next; sibling; sibling = sibling->next) {
424 if(sibling->type == XMLNODE_TYPE_TAG && !strcmp(node->name, sibling->name)) 436 const char *xmlns;
437 if(ns)
438 xmlns = xmlnode_get_attrib(sibling, "xmlns");
439
440 if(sibling->type == XMLNODE_TYPE_TAG && !strcmp(node->name, sibling->name) &&
441 (!ns || (xmlns && !strcmp(ns, xmlns))))
425 return sibling; 442 return sibling;
426 } 443 }
427 444
428 return NULL; 445 return NULL;
429 } 446 }