Mercurial > pidgin
comparison src/xmlnode.c @ 7642:9008b5be4275
[gaim-migrate @ 8285]
let the xmlnode stuff handle embedded NULLs (i'll need this later)
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Wed, 26 Nov 2003 17:28:13 +0000 |
| parents | af889fd531d0 |
| children | fa6395637e2c |
comparison
equal
deleted
inserted
replaced
| 7641:a80010831ff8 | 7642:9008b5be4275 |
|---|---|
| 231 } | 231 } |
| 232 | 232 |
| 233 return ret; | 233 return ret; |
| 234 } | 234 } |
| 235 | 235 |
| 236 char *xmlnode_to_str(xmlnode *node) | 236 char *xmlnode_to_str(xmlnode *node, int *len) |
| 237 { | 237 { |
| 238 char *ret; | 238 char *ret; |
| 239 GString *text = g_string_new(""); | 239 GString *text = g_string_new(""); |
| 240 xmlnode *c; | 240 xmlnode *c; |
| 241 char *node_name, *esc, *esc2; | 241 char *node_name, *esc, *esc2; |
| 262 text = g_string_append_c(text, '>'); | 262 text = g_string_append_c(text, '>'); |
| 263 | 263 |
| 264 for(c = node->child; c; c = c->next) | 264 for(c = node->child; c; c = c->next) |
| 265 { | 265 { |
| 266 if(c->type == NODE_TYPE_TAG) { | 266 if(c->type == NODE_TYPE_TAG) { |
| 267 esc = xmlnode_to_str(c); | 267 int esc_len; |
| 268 g_string_append_printf(text, "%s", esc); | 268 esc = xmlnode_to_str(c, &esc_len); |
| 269 text = g_string_append_len(text, esc, esc_len); | |
| 269 g_free(esc); | 270 g_free(esc); |
| 270 } else if(c->type == NODE_TYPE_DATA) { | 271 } else if(c->type == NODE_TYPE_DATA) { |
| 271 esc = g_markup_escape_text(c->data, c->data_sz); | 272 esc = g_markup_escape_text(c->data, c->data_sz); |
| 272 g_string_append_printf(text, "%s", esc); | 273 text = g_string_append(text, esc); |
| 273 g_free(esc); | 274 g_free(esc); |
| 274 } | 275 } |
| 275 } | 276 } |
| 276 | 277 |
| 277 g_string_append_printf(text, "</%s>", node_name); | 278 g_string_append_printf(text, "</%s>", node_name); |
| 280 } | 281 } |
| 281 | 282 |
| 282 g_free(node_name); | 283 g_free(node_name); |
| 283 | 284 |
| 284 ret = text->str; | 285 ret = text->str; |
| 286 if(len) | |
| 287 *len = text->len; | |
| 285 g_string_free(text, FALSE); | 288 g_string_free(text, FALSE); |
| 286 return ret; | 289 return ret; |
| 287 } | 290 } |
| 288 | 291 |
| 289 struct _xmlnode_parser_data { | 292 struct _xmlnode_parser_data { |
