summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/irc/irc-message.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/plugins/irc/irc-message.c b/src/plugins/irc/irc-message.c
index e0c4dcf4f..2b465abd8 100644
--- a/src/plugins/irc/irc-message.c
+++ b/src/plugins/irc/irc-message.c
@@ -70,7 +70,7 @@ irc_message_parse (struct t_irc_server *server, const char *message,
int *pos_command, int *pos_arguments, int *pos_channel,
int *pos_text)
{
- const char *ptr_message, *pos, *pos2, *pos3, *pos4;
+ const char *ptr_message, *pos, *pos2, *pos3, *pos4, *ptr_channel_found;
if (tags)
*tags = NULL;
@@ -96,6 +96,7 @@ irc_message_parse (struct t_irc_server *server, const char *message,
*pos_channel = -1;
if (pos_text)
*pos_text = -1;
+ ptr_channel_found = NULL;
if (!message)
return;
@@ -209,6 +210,7 @@ irc_message_parse (struct t_irc_server *server, const char *message,
{
if (irc_channel_is_channel (server, pos))
{
+ ptr_channel_found = pos;
pos2 = strchr (pos, ' ');
if (channel)
{
@@ -253,6 +255,7 @@ irc_message_parse (struct t_irc_server *server, const char *message,
}
if (irc_channel_is_channel (server, pos2))
{
+ ptr_channel_found = pos2;
pos4 = strchr (pos2, ' ');
if (channel)
{
@@ -277,13 +280,38 @@ irc_message_parse (struct t_irc_server *server, const char *message,
*pos_text = pos4 - message;
}
}
- else if ((channel && !*channel)
- || (pos_channel && (*pos_channel < 0)))
+ else
{
- if (channel)
- *channel = weechat_strndup (pos, pos3 - pos);
- if (pos_channel)
- *pos_channel = pos - message;
+ if (ptr_channel_found)
+ {
+ if (pos[0] == ':')
+ pos++;
+ if (text)
+ *text = strdup (pos);
+ if (pos_text)
+ *pos_text = pos - message;
+ }
+ else
+ {
+ if (channel)
+ *channel = weechat_strndup (pos, pos3 - pos);
+ if (pos_channel)
+ *pos_channel = pos - message;
+ pos4 = strchr (pos3, ' ');
+ if (pos4)
+ {
+ while (pos4[0] == ' ')
+ {
+ pos4++;
+ }
+ if (pos4[0] == ':')
+ pos4++;
+ if (text)
+ *text = strdup (pos4);
+ if (pos_text)
+ *pos_text = pos4 - message;
+ }
+ }
}
}
}