aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--irc.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/irc.c b/irc.c
index 096f9d99..b6185d85 100644
--- a/irc.c
+++ b/irc.c
@@ -562,16 +562,25 @@ void irc_write( irc_t *irc, char *format, ... )
void irc_vawrite( irc_t *irc, char *format, va_list params )
{
int size;
- char line[IRC_MAX_LINE];
-
+ char line[IRC_MAX_LINE+1], *cs;
+
if( irc->quit )
return;
-
- g_vsnprintf( line, IRC_MAX_LINE - 3, format, params );
-
+
+ line[IRC_MAX_LINE] = 0;
+ g_vsnprintf( line, IRC_MAX_LINE - 2, format, params );
+
strip_newlines( line );
+ if( ( cs = set_getstr( irc, "charset" ) ) )
+ {
+ char conv[IRC_MAX_LINE+1];
+
+ conv[IRC_MAX_LINE] = 0;
+ if( do_iconv( "UTF-8", cs, line, conv, 0, IRC_MAX_LINE - 2 ) != -1 )
+ strcpy( line, conv );
+ }
strcat( line, "\r\n" );
-
+
if( irc->sendbuffer != NULL ) {
size = strlen( irc->sendbuffer ) + strlen( line );
irc->sendbuffer = g_renew ( char, irc->sendbuffer, size + 1 );