summaryrefslogtreecommitdiff
path: root/src/libguess/guess.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libguess/guess.c')
-rw-r--r--src/libguess/guess.c66
1 files changed, 31 insertions, 35 deletions
diff --git a/src/libguess/guess.c b/src/libguess/guess.c
index 2a3845c..fe5934e 100644
--- a/src/libguess/guess.c
+++ b/src/libguess/guess.c
@@ -1,54 +1,50 @@
-#include "libguess.h"
+#include <strings.h>
-mowgli_patricia_t *guess_impl_list = NULL;
+#include "libguess.h"
-void strcasecanon(char *str)
+struct guess_impl {
+ const char *lang;
+ guess_impl_f impl;
+};
+
+static const struct guess_impl guess_impl_list[] = {
+ {GUESS_REGION_JP, guess_jp},
+ {GUESS_REGION_TW, guess_tw},
+ {GUESS_REGION_CN, guess_cn},
+ {GUESS_REGION_KR, guess_kr},
+ {GUESS_REGION_RU, guess_ru},
+ {GUESS_REGION_AR, guess_ar},
+ {GUESS_REGION_TR, guess_tr},
+ {GUESS_REGION_GR, guess_gr},
+ {GUESS_REGION_HW, guess_hw},
+ {GUESS_REGION_PL, guess_pl},
+ {GUESS_REGION_BL, guess_bl},
+};
+
+static guess_impl_f
+guess_find_impl(const char *lang)
{
- while (*str)
- {
- *str = toupper(*str);
- str++;
- }
-}
+ int i;
-static void
-guess_impl_register(const char *lang, guess_impl_f impl)
-{
- return_if_fail(guess_impl_list != NULL);
+ for (i = 0; i < sizeof(guess_impl_list) / sizeof(guess_impl_list[0]); i++) {
+ if (!strcasecmp(guess_impl_list[i].lang, lang))
+ return guess_impl_list[i].impl;
+ }
- mowgli_patricia_add(guess_impl_list, lang, impl);
+ return 0;
}
void
libguess_init(void)
{
- /* check if already initialized */
- if (guess_impl_list != NULL)
- return;
-
- guess_impl_list = mowgli_patricia_create(strcasecanon);
-
- guess_impl_register(GUESS_REGION_JP, guess_jp);
- guess_impl_register(GUESS_REGION_TW, guess_tw);
- guess_impl_register(GUESS_REGION_CN, guess_cn);
- guess_impl_register(GUESS_REGION_KR, guess_kr);
- guess_impl_register(GUESS_REGION_RU, guess_ru);
- guess_impl_register(GUESS_REGION_AR, guess_ar);
- guess_impl_register(GUESS_REGION_TR, guess_tr);
- guess_impl_register(GUESS_REGION_GR, guess_gr);
- guess_impl_register(GUESS_REGION_HW, guess_hw);
- guess_impl_register(GUESS_REGION_PL, guess_pl);
- guess_impl_register(GUESS_REGION_BL, guess_bl);
+ /* provided for API compatibility with older versions */
}
const char *
libguess_determine_encoding(const char *inbuf, int buflen, const char *lang)
{
- guess_impl_f impl;
-
- libguess_init();
+ guess_impl_f impl = guess_find_impl(lang);
- impl = mowgli_patricia_retrieve(guess_impl_list, lang);
if (impl != NULL)
return impl(inbuf, buflen);