diff pidgin/gtkimhtml.c @ 25357:b01a7f17a2bb

Detect duplication registrations by substring. committer: Richard Laager <rlaager@wiktel.com>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Tue, 02 Dec 2008 17:20:53 +0000
parents c6f7143cc7f4
children f1d814126801
line wrap: on
line diff
--- a/pidgin/gtkimhtml.c	Tue Dec 02 17:20:28 2008 +0000
+++ b/pidgin/gtkimhtml.c	Tue Dec 02 17:20:53 2008 +0000
@@ -1411,16 +1411,17 @@
 }
 
 static GtkIMHtmlProtocol *
-imhtml_find_protocol(const char *url)
+imhtml_find_protocol(const char *url, gboolean reverse)
 {
 	GtkIMHtmlClass *klass;
 	GList *iter;
 	GtkIMHtmlProtocol *proto = NULL;
+	int length = reverse ? strlen(url) : -1;
 
 	klass = g_type_class_ref(GTK_TYPE_IMHTML);
 	for (iter = klass->protocols; iter; iter = iter->next) {
 		proto = iter->data;
-		if (g_ascii_strncasecmp(url, proto->name, proto->length) == 0) {
+		if (g_ascii_strncasecmp(url, proto->name, reverse ? MIN(length, proto->length) : proto->length) == 0) {
 			return proto;
 		}
 	}
@@ -1430,7 +1431,7 @@
 static void
 imhtml_url_clicked(GtkIMHtml *imhtml, const char *url)
 {
-	GtkIMHtmlProtocol *proto = imhtml_find_protocol(url);
+	GtkIMHtmlProtocol *proto = imhtml_find_protocol(url, FALSE);
 	GtkIMHtmlLink *link;
 	if (!proto)
 		return;
@@ -1790,7 +1791,7 @@
 			g_object_set_data_full(G_OBJECT(menu), "x-imhtml-url-data", link,
 					(GDestroyNotify)gtk_imhtml_link_destroy);
 
-			proto = imhtml_find_protocol(link->url);
+			proto = imhtml_find_protocol(link->url, FALSE);
 
 			if (proto && proto->context_menu) {
 				proto->context_menu(GTK_IMHTML(link->imhtml), link, menu);
@@ -2386,7 +2387,7 @@
    the caller knows how long the protocol string is. */
 static int gtk_imhtml_is_protocol(const char *text)
 {
-	GtkIMHtmlProtocol *proto = imhtml_find_protocol(text);
+	GtkIMHtmlProtocol *proto = imhtml_find_protocol(text, FALSE);
 	return proto ? proto->length : 0;
 }
 
@@ -5756,7 +5757,7 @@
 	klass = g_type_class_ref(GTK_TYPE_IMHTML);
 	g_return_val_if_fail(klass, FALSE);
 
-	if ((proto = imhtml_find_protocol(name))) {
+	if ((proto = imhtml_find_protocol(name, TRUE))) {
 		g_return_val_if_fail(!activate, FALSE);
 		g_free(proto->name);
 		g_free(proto);