summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
authorPatrick Griffis <tingping@tingping.se>2016-03-11 02:15:42 -0500
committerPatrick Griffis <tingping@tingping.se>2016-03-11 02:15:42 -0500
commit7c078db879c2f645a803224c5f9b70ed9cb8d911 (patch)
treebfd9f88a569238e5cc4ad7eddb0094b10b99226d /src/common
parentebb0fd6905d6af6daaa2db15b71d4cacd028e14a (diff)
Fix loading encoding from network list on connect
- Fix setting new encoding when switching networks
- Ignore ports when looking for network by hostname
- Only set UTF-8 when nothing explicitly set

Fixes #1628
Diffstat (limited to 'src/common')
-rw-r--r--src/common/outbound.c7
-rw-r--r--src/common/server.c3
-rw-r--r--src/common/servlist.c13
3 files changed, 17 insertions, 6 deletions
diff --git a/src/common/outbound.c b/src/common/outbound.c
index a4611927..5ca8b783 100644
--- a/src/common/outbound.c
+++ b/src/common/outbound.c
@@ -3439,10 +3439,9 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[])
 	}
 
 	/* try to associate this connection with a listed network */
-	if (!serv->network)
-		/* search for this hostname in the entire server list */
-		serv->network = servlist_net_find_from_server (server_name);
-		/* may return NULL, but that's OK */
+	/* may return NULL, but that's OK */
+	if ((serv->network = servlist_net_find_from_server (server_name)))
+		server_set_encoding (serv, ((ircnet*)serv->network)->encoding);
 
 	return TRUE;
 }
diff --git a/src/common/server.c b/src/common/server.c
index 709bfb22..b94f57e7 100644
--- a/src/common/server.c
+++ b/src/common/server.c
@@ -1728,7 +1728,8 @@ server_set_defaults (server *serv)
 	serv->nick_modes = g_strdup ("ohv");
 	serv->sasl_mech = MECH_PLAIN;
 
-	server_set_encoding (serv, "UTF-8");
+	if (!serv->encoding)
+		server_set_encoding (serv, "UTF-8");
 
 	serv->nickcount = 1;
 	serv->end_of_motd = FALSE;
diff --git a/src/common/servlist.c b/src/common/servlist.c
index f043d4bc..897f0d0f 100644
--- a/src/common/servlist.c
+++ b/src/common/servlist.c
@@ -714,8 +714,19 @@ servlist_net_find_from_server (char *server_name)
 		slist = net->servlist;
 		while (slist)
 		{
+			gsize hostname_len;
+			const char *hostname, *p;
+
 			serv = slist->data;
-			if (g_ascii_strcasecmp (serv->hostname, server_name) == 0)
+			hostname = serv->hostname;
+
+			/* Ignore port when comparing */
+			if ((p = strchr (hostname, '/')))
+				hostname_len = p - hostname;
+			else
+				hostname_len = strlen (hostname);
+
+			if (g_ascii_strncasecmp (hostname, server_name, hostname_len) == 0)
 				return net;
 			slist = slist->next;
 		}