Mercurial > pidgin.yaz
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 } |
