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 {