static void
add_item_to_list (gpointer key, gpointer value, gpointer list)
{
char **user_data = list;
int length = 0;
if (!key)
return;
char *data = *user_data;
if (data) {
char *escaped_data;
char *tmp = data, *bkup;
while (*data) {
if (*data == '<' || *data == '>')
length += 3;
else if (*data == '&')
length += 4;
else if(*data == '\"' || *data == '\'')
length += 5;
length++;
data++;
}
escaped_data = malloc ((length+1)*sizeof(char));
bkup = escaped_data;
while (*tmp) {
switch (*tmp) {
case '<':
strcpy (escaped_data, "<");
escaped_data += 4;
break;
case '>':
strcpy (escaped_data, ">");
escaped_data += 4;
break;
case '&':
strcpy (escaped_data, "&");
escaped_data += 5;
break;
case '\'':
strcpy (escaped_data, "'");
escaped_data += 6;
break;
case '\"':
strcpy (escaped_data, """);
escaped_data += 6;
break;
default:
*escaped_data = *tmp;
escaped_data++;
}
tmp++;
}
escaped_data = '\0';
escaped_data = bkup;
/*
FIXME: Avoid memory fragmentation
*/
tmp = g_strdup_printf ("%s", escaped_data, (char *)key);
g_free (data);
data = tmp;
}
else
data = g_strdup_printf ("", (char *) key);
*user_data = data;
}