From 9dc678e1d31e85af455f6b7c54dcfaa6e6b66c68 Mon Sep 17 00:00:00 2001 From: Emanuele Giaquinta Date: Fri, 18 May 2007 14:41:44 +0000 Subject: [PATCH] Factor common code in recode_{in,out}. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4499 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/core/recode.c | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/core/recode.c b/src/core/recode.c index ebcfbbb9..65cf7e08 100644 --- a/src/core/recode.c +++ b/src/core/recode.c @@ -82,6 +82,22 @@ gboolean is_valid_charset(const char *charset) #endif } +static char *find_conversion(const SERVER_REC *server, const char *target) +{ + char *conv = NULL; + + if (server != NULL && target != NULL) { + char *tagtarget = g_strdup_printf("%s/%s", server->tag, target); + conv = iconfig_get_str("conversions", tagtarget, NULL); + g_free(tagtarget); + } + if (conv == NULL && target != NULL) + conv = iconfig_get_str("conversions", target, NULL); + if (conv == NULL && server != NULL) + conv = iconfig_get_str("conversions", server->tag, NULL); + return conv; +} + char *recode_in(const SERVER_REC *server, const char *str, const char *target) { #ifdef HAVE_GLIB2 @@ -121,18 +137,7 @@ char *recode_in(const SERVER_REC *server, const char *str, const char *target) from = "UTF-8"; else { - if (server != NULL && server->tag != NULL && target != NULL) { - char *tagtarget = g_strdup_printf("%s/%s", server->tag, target); - from = iconfig_get_str("conversions", tagtarget, NULL); - g_free(tagtarget); - } - - if (target != NULL && from == NULL) - from = iconfig_get_str("conversions", target, NULL); - - if (from == NULL && server != NULL) - from = iconfig_get_str("conversions", server->tag, NULL); - + from = find_conversion(server, target); } if (translit && !is_translit(to)) @@ -183,16 +188,8 @@ char *recode_out(const SERVER_REC *server, const char *str, const char *target) translit = settings_get_bool("recode_transliterate"); - if (server != NULL && server->tag != NULL && target != NULL) { - char *tagtarget = g_strdup_printf("%s/%s", server->tag, target); - to = iconfig_get_str("conversions", tagtarget, NULL); - g_free(tagtarget); - } - if ((to == NULL || *to == '\0') && target != NULL) - to = iconfig_get_str("conversions", target, NULL); - if ((to == NULL || *to == '\0') && server != NULL) - to = iconfig_get_str("conversions", server->tag, NULL); - if (to == NULL || *to == '\0') + to = find_conversion(server, target); + if (to == NULL) /* default outgoing charset if set */ to = settings_get_str("recode_out_default_charset");