summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2007-05-18 14:41:44 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2007-05-18 14:41:44 +0000
commit9dc678e1d31e85af455f6b7c54dcfaa6e6b66c68 (patch)
treee78acf98ebb4e6e4ff7e9bbb62dc83f78154bd39 /src/core
parentc685272a120b224159bf9dcad4a3c0ef46c2e3cb (diff)
downloadirssi-9dc678e1d31e85af455f6b7c54dcfaa6e6b66c68.zip
Factor common code in recode_{in,out}.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4499 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/core')
-rw-r--r--src/core/recode.c41
1 files 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");