From c48ee3cd73debc70aba550e20181606652574cad Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Wed, 26 Jan 2005 23:54:29 +0000 Subject: [PATCH] Fixed bug in message parser when connected to many servers --- src/irc/irc-server.c | 26 ++++++++++++-------------- src/irc/irc.h | 1 + weechat/src/irc/irc-server.c | 26 ++++++++++++-------------- weechat/src/irc/irc.h | 1 + 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c index 1e05e1ff1..8ad22e8b5 100644 --- a/src/irc/irc-server.c +++ b/src/irc/irc-server.c @@ -50,10 +50,6 @@ t_irc_message *recv_msgq, *msgq_last_msg; int check_away = 0; -/* buffer containing beginning of message if not ending with \r\n */ -char *unterminated_message = NULL; - - /* * server_init: init server struct with default values */ @@ -77,6 +73,7 @@ server_init (t_irc_server *server) server->command = NULL; server->command_delay = 1; server->autojoin = NULL; + server->unterminated_message = NULL; server->nick = NULL; server->is_connected = 0; server->reconnect_start = 0; @@ -427,9 +424,9 @@ server_msgq_add_msg (t_irc_server *server, char *msg) return; } message->server = server; - if (unterminated_message) + if (server->unterminated_message) { - message->data = (char *) malloc (strlen (unterminated_message) + + message->data = (char *) malloc (strlen (server->unterminated_message) + strlen (msg) + 1); if (!message->data) { @@ -440,11 +437,11 @@ server_msgq_add_msg (t_irc_server *server, char *msg) } else { - strcpy (message->data, unterminated_message); + strcpy (message->data, server->unterminated_message); strcat (message->data, msg); } - free (unterminated_message); - unterminated_message = NULL; + free (server->unterminated_message); + server->unterminated_message = NULL; } else message->data = strdup (msg); @@ -467,7 +464,7 @@ server_msgq_add_msg (t_irc_server *server, char *msg) */ void -server_msgq_add_buffer (t_irc_server * server, char *buffer) +server_msgq_add_buffer (t_irc_server *server, char *buffer) { char *pos; @@ -494,10 +491,10 @@ server_msgq_add_buffer (t_irc_server * server, char *buffer) pos = strchr (buffer, '\0'); if (pos) { - unterminated_message = - (char *) realloc (unterminated_message, + server->unterminated_message = + (char *) realloc (server->unterminated_message, strlen (buffer) + 1); - if (!unterminated_message) + if (!server->unterminated_message) { irc_display_prefix (server->buffer, PREFIX_ERROR); gui_printf (server->buffer, @@ -505,7 +502,7 @@ server_msgq_add_buffer (t_irc_server * server, char *buffer) WEECHAT_ERROR); } else - strcpy (unterminated_message, buffer); + strcpy (server->unterminated_message, buffer); return; } irc_display_prefix (server->buffer, PREFIX_ERROR); @@ -840,6 +837,7 @@ server_disconnect (t_irc_server *server, int reconnect) close (server->sock4); server->sock4 = -1; + server->unterminated_message = NULL; server->is_connected = 0; server->is_away = 0; server->away_time = 0; diff --git a/src/irc/irc.h b/src/irc/irc.h index b4b2e07f3..6f1af694c 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -138,6 +138,7 @@ struct t_irc_server int autorejoin; /* auto rejoin channels when kicked */ /* internal vars */ + char *unterminated_message; /* beginning of a message in input buf */ char *nick; /* current nickname */ int is_connected; /* 1 if WeeChat is connected to server */ time_t reconnect_start; /* this time + delay = reconnect time */ diff --git a/weechat/src/irc/irc-server.c b/weechat/src/irc/irc-server.c index 1e05e1ff1..8ad22e8b5 100644 --- a/weechat/src/irc/irc-server.c +++ b/weechat/src/irc/irc-server.c @@ -50,10 +50,6 @@ t_irc_message *recv_msgq, *msgq_last_msg; int check_away = 0; -/* buffer containing beginning of message if not ending with \r\n */ -char *unterminated_message = NULL; - - /* * server_init: init server struct with default values */ @@ -77,6 +73,7 @@ server_init (t_irc_server *server) server->command = NULL; server->command_delay = 1; server->autojoin = NULL; + server->unterminated_message = NULL; server->nick = NULL; server->is_connected = 0; server->reconnect_start = 0; @@ -427,9 +424,9 @@ server_msgq_add_msg (t_irc_server *server, char *msg) return; } message->server = server; - if (unterminated_message) + if (server->unterminated_message) { - message->data = (char *) malloc (strlen (unterminated_message) + + message->data = (char *) malloc (strlen (server->unterminated_message) + strlen (msg) + 1); if (!message->data) { @@ -440,11 +437,11 @@ server_msgq_add_msg (t_irc_server *server, char *msg) } else { - strcpy (message->data, unterminated_message); + strcpy (message->data, server->unterminated_message); strcat (message->data, msg); } - free (unterminated_message); - unterminated_message = NULL; + free (server->unterminated_message); + server->unterminated_message = NULL; } else message->data = strdup (msg); @@ -467,7 +464,7 @@ server_msgq_add_msg (t_irc_server *server, char *msg) */ void -server_msgq_add_buffer (t_irc_server * server, char *buffer) +server_msgq_add_buffer (t_irc_server *server, char *buffer) { char *pos; @@ -494,10 +491,10 @@ server_msgq_add_buffer (t_irc_server * server, char *buffer) pos = strchr (buffer, '\0'); if (pos) { - unterminated_message = - (char *) realloc (unterminated_message, + server->unterminated_message = + (char *) realloc (server->unterminated_message, strlen (buffer) + 1); - if (!unterminated_message) + if (!server->unterminated_message) { irc_display_prefix (server->buffer, PREFIX_ERROR); gui_printf (server->buffer, @@ -505,7 +502,7 @@ server_msgq_add_buffer (t_irc_server * server, char *buffer) WEECHAT_ERROR); } else - strcpy (unterminated_message, buffer); + strcpy (server->unterminated_message, buffer); return; } irc_display_prefix (server->buffer, PREFIX_ERROR); @@ -840,6 +837,7 @@ server_disconnect (t_irc_server *server, int reconnect) close (server->sock4); server->sock4 = -1; + server->unterminated_message = NULL; server->is_connected = 0; server->is_away = 0; server->away_time = 0; diff --git a/weechat/src/irc/irc.h b/weechat/src/irc/irc.h index b4b2e07f3..6f1af694c 100644 --- a/weechat/src/irc/irc.h +++ b/weechat/src/irc/irc.h @@ -138,6 +138,7 @@ struct t_irc_server int autorejoin; /* auto rejoin channels when kicked */ /* internal vars */ + char *unterminated_message; /* beginning of a message in input buf */ char *nick; /* current nickname */ int is_connected; /* 1 if WeeChat is connected to server */ time_t reconnect_start; /* this time + delay = reconnect time */