diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-10-02 19:45:26 -0700 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-10-02 19:45:26 -0700 |
commit | 8e9e2b7d9e54744cee32b3724391bf0ad04e8aff (patch) | |
tree | 6cafdc57bb8143306daf8ef8288d09754f39b451 /irc_send.c | |
parent | 88de0c96136313e553113f69cfc6ae544a5f5954 (diff) | |
parent | 2af3e232ff468b288dd4e0dbdab1a17312d801c5 (diff) |
Merging mainline, which includes a huge msnp13 merge.
Not 100% sure about the OpenSSL merge, should double check that but I'm
currently offline.
Diffstat (limited to 'irc_send.c')
-rw-r--r-- | irc_send.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -52,24 +52,27 @@ void irc_send_login( irc_t *irc ) void irc_send_motd( irc_t *irc ) { + char motd[2048]; + size_t len; int fd; fd = open( global.conf->motdfile, O_RDONLY ); - if( fd == -1 ) + if( fd == -1 || ( len = read( fd, motd, sizeof( motd ) - 1 ) ) <= 0 ) { irc_send_num( irc, 422, ":We don't need MOTDs." ); } else { - char linebuf[80]; /* Max. line length for MOTD's is 79 chars. It's what most IRC networks seem to do. */ - char *add, max; - int len; + char linebuf[80]; + char *add = "", max, *in; + in = motd; + motd[len] = '\0'; linebuf[79] = len = 0; max = sizeof( linebuf ) - 1; irc_send_num( irc, 375, ":- %s Message Of The Day - ", irc->root->host ); - while( read( fd, linebuf + len, 1 ) == 1 ) + while( ( linebuf[len] = *(in++) ) ) { if( linebuf[len] == '\n' || len == max ) { @@ -79,13 +82,15 @@ void irc_send_motd( irc_t *irc ) } else if( linebuf[len] == '%' ) { - read( fd, linebuf + len, 1 ); + linebuf[len] = *(in++); if( linebuf[len] == 'h' ) add = irc->root->host; else if( linebuf[len] == 'v' ) add = BITLBEE_VERSION; else if( linebuf[len] == 'n' ) add = irc->user->nick; + else if( linebuf[len] == '\0' ) + in --; else add = "%"; @@ -98,15 +103,17 @@ void irc_send_motd( irc_t *irc ) } } irc_send_num( irc, 376, ":End of MOTD" ); - close( fd ); } + + if( fd != -1 ) + close( fd ); } void irc_usermsg( irc_t *irc, char *format, ... ) { irc_channel_t *ic = NULL; irc_user_t *iu = irc->root; - char text[1024]; + char text[1100]; va_list params; char *dst; |