diff options
author | Emmanuel Bouthenot <kolter@openics.org> | 2006-02-12 21:50:31 +0000 |
---|---|---|
committer | Emmanuel Bouthenot <kolter@openics.org> | 2006-02-12 21:50:31 +0000 |
commit | fa02f128ec08d7914b369949e96c22331d0ec08a (patch) | |
tree | f50d51811ac665ab6ce5d82a5da91737a1cf2385 /src | |
parent | 06ecdfdd35d7b7a729ba8660d16b4c9a0cd62a09 (diff) | |
download | weechat-fa02f128ec08d7914b369949e96c22331d0ec08a.zip |
make possible to run more than one command when connecting to server
Diffstat (limited to 'src')
-rw-r--r-- | src/irc/irc-recv.c | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index b4be5b46a..c35e1692b 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -2431,7 +2431,8 @@ irc_cmd_recv_topic (t_irc_server *server, char *host, char *nick, char *argument int irc_cmd_recv_004 (t_irc_server *server, char *host, char *nick, char *arguments) { - char *pos; + char *pos, *buffer, *s, *q; + int i, f; t_irc_channel *ptr_channel; pos = strchr (arguments, ' '); @@ -2454,11 +2455,53 @@ irc_cmd_recv_004 (t_irc_server *server, char *host, char *nick, char *arguments) /* execute command once connected */ if (server->command && server->command[0]) { - user_command (server, NULL, server->command); - if (server->command_delay > 0) - sleep (server->command_delay); + /* splitting command on ';' which can be escaped with '\;' */ + buffer = (char *) malloc ( (strlen(server->command) + 1) * sizeof (char)); + + if (buffer) + { + s = server->command; + i = 0; + while(*s != '\0') + { + f = 0; + if (*s == ';') + { + if (s == server->command) + f = 1; + else if ( *(s-1) != '\\') + f = 1; + else if ( *(s-1) == '\\') + f = 2; + } + if (f == 1) + { + buffer[i] = '\0'; + i = -1; + q = buffer; + while (*q == ' ') q++; + if (q && q[0]) + user_command (server, NULL, q); + } + else if (f == 2) + buffer[--i] = *s; + else + buffer[i] = *s; + i++; s++; + } + buffer[i] = '\0'; + q = buffer; + while (*q == ' ') q++; + if (q && q[0]) + user_command (server, NULL, q); + + free (buffer); + } + + if (server->command_delay > 0) + sleep (server->command_delay); } - + /* auto-join after disconnection (only rejoins opened channels) */ if (server->reconnect_join && server->channels) { |