All pastes #69316 Raw Edit

Casanova

public c v1 · immutable
#69316 ·published 2006-06-22 20:04 UTC
rendered paste body
static voidadd_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, "&lt;");				escaped_data += 4;				break;			case '>':				strcpy (escaped_data, "&gt;");				escaped_data += 4;				break;			case '&':				strcpy (escaped_data, "&amp;");				escaped_data += 5;				break;			case '\'':				strcpy (escaped_data, "&apos;");				escaped_data += 6;				break;			case '\"':				strcpy (escaped_data, "&quot;");				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<OBJECT>%s</OBJECT>", escaped_data, (char *)key);                g_free (data);                data = tmp;        }        else                data = g_strdup_printf ("<OBJECT>%s</OBJECT>", (char *) key);	*user_data = data;}