summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/channels-setup.c15
-rw-r--r--src/core/channels-setup.h3
-rw-r--r--src/core/misc.c12
-rw-r--r--src/core/servers-setup.c15
-rw-r--r--src/core/servers-setup.h3
-rw-r--r--src/fe-common/core/hilight-text.c12
-rw-r--r--src/fe-common/irc/fe-ircnet.c4
7 files changed, 54 insertions, 10 deletions
diff --git a/src/core/channels-setup.c b/src/core/channels-setup.c
index b2d971dd..2902ef8e 100644
--- a/src/core/channels-setup.c
+++ b/src/core/channels-setup.c
@@ -86,6 +86,21 @@ static void channel_setup_destroy(CHANNEL_SETUP_REC *channel)
g_free(channel);
}
+void channel_setup_remove_chatnet(const char *chatnet)
+{
+ GSList *tmp, *next;
+
+ g_return_if_fail(chatnet != NULL);
+
+ for (tmp = setupchannels; tmp != NULL; tmp = next) {
+ CHANNEL_SETUP_REC *rec = tmp->data;
+
+ next = tmp->next;
+ if (g_ascii_strcasecmp(rec->chatnet, chatnet) == 0)
+ channel_setup_remove(rec);
+ }
+}
+
void channel_setup_remove(CHANNEL_SETUP_REC *channel)
{
channel_config_remove(channel);
diff --git a/src/core/channels-setup.h b/src/core/channels-setup.h
index 61b828b2..3bb7da7f 100644
--- a/src/core/channels-setup.h
+++ b/src/core/channels-setup.h
@@ -21,6 +21,9 @@ void channels_setup_deinit(void);
void channel_setup_create(CHANNEL_SETUP_REC *channel);
void channel_setup_remove(CHANNEL_SETUP_REC *channel);
+/* Remove channels attached to chatnet */
+void channel_setup_remove_chatnet(const char *chatnet);
+
CHANNEL_SETUP_REC *channel_setup_find(const char *channel,
const char *chatnet);
diff --git a/src/core/misc.c b/src/core/misc.c
index 88c27255..490b5a8f 100644
--- a/src/core/misc.c
+++ b/src/core/misc.c
@@ -997,22 +997,22 @@ char **strsplit_len(const char *str, int len, gboolean onspace)
int n;
int offset;
- for (n = 0; *str != '\0'; n++, str += MIN(len - offset, strlen(str))) {
- offset = 0;
- if (onspace) {
+ for (n = 0; *str != '\0'; n++, str += offset) {
+ offset = MIN(len, strlen(str));
+ if (onspace && strlen(str) > len) {
/*
* Try to find a space to split on and leave
* the space on the previous line.
*/
int i;
- for (i = 0; i < len; i++) {
- if (str[len-1-i] == ' ') {
+ for (i = len - 1; i > 0; i--) {
+ if (str[i] == ' ') {
offset = i;
break;
}
}
}
- ret[n] = g_strndup(str, len - offset);
+ ret[n] = g_strndup(str, offset);
ret = g_renew(char *, ret, n + 2);
}
ret[n] = NULL;
diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c
index 90a447d4..771e3999 100644
--- a/src/core/servers-setup.c
+++ b/src/core/servers-setup.c
@@ -505,6 +505,21 @@ void server_setup_add(SERVER_SETUP_REC *rec)
signal_emit("server setup updated", 1, rec);
}
+void server_setup_remove_chatnet(const char *chatnet)
+{
+ GSList *tmp, *next;
+
+ g_return_if_fail(chatnet != NULL);
+
+ for (tmp = setupservers; tmp != NULL; tmp = next) {
+ SERVER_SETUP_REC *rec = tmp->data;
+
+ next = tmp->next;
+ if (g_ascii_strcasecmp(rec->chatnet, chatnet) == 0)
+ server_setup_remove(rec);
+ }
+}
+
void server_setup_remove(SERVER_SETUP_REC *rec)
{
server_setup_remove_config(rec);
diff --git a/src/core/servers-setup.h b/src/core/servers-setup.h
index f7601a68..e7ff7abf 100644
--- a/src/core/servers-setup.h
+++ b/src/core/servers-setup.h
@@ -39,6 +39,9 @@ SERVER_SETUP_REC *server_setup_find(const char *address, int port,
void server_setup_add(SERVER_SETUP_REC *rec);
void server_setup_remove(SERVER_SETUP_REC *rec);
+/* Remove servers attached to chatne */
+void server_setup_remove_chatnet(const char *chatnet);
+
void servers_setup_init(void);
void servers_setup_deinit(void);
diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c
index 87c5d467..9822de1e 100644
--- a/src/fe-common/core/hilight-text.c
+++ b/src/fe-common/core/hilight-text.c
@@ -484,10 +484,14 @@ static void hilight_print(int index, HILIGHT_REC *rec)
GString *options;
options = g_string_new(NULL);
- if (!rec->nick || !rec->word) {
- if (rec->nick) g_string_append(options, "-nick ");
- if (rec->word) g_string_append(options, "-word ");
- }
+
+ if (rec->nick && rec->word) { /* default case, no option */ }
+ else if (rec->nick)
+ g_string_append(options, "-nick ");
+ else if (rec->word)
+ g_string_append(options, "-word ");
+ else
+ g_string_append(options, "-line ");
if (rec->nickmask) g_string_append(options, "-mask ");
if (rec->fullword) g_string_append(options, "-full ");
diff --git a/src/fe-common/irc/fe-ircnet.c b/src/fe-common/irc/fe-ircnet.c
index bb0af313..4d7037d5 100644
--- a/src/fe-common/irc/fe-ircnet.c
+++ b/src/fe-common/irc/fe-ircnet.c
@@ -29,6 +29,8 @@
#include "irc-servers.h"
#include "irc-chatnets.h"
#include "printtext.h"
+#include "servers-setup.h"
+#include "channels-setup.h"
static void cmd_network_list(void)
{
@@ -183,6 +185,8 @@ static void cmd_network_remove(const char *data)
if (rec == NULL)
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_NETWORK_NOT_FOUND, data);
else {
+ server_setup_remove_chatnet(data);
+ channel_setup_remove_chatnet(data);
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_NETWORK_REMOVED, data);
chatnet_remove(CHATNET(rec));
}