]>
Commit | Line | Data |
---|---|---|
517e249f | 1 | --- poldek-0.30-cvs20080820.23/misc.c.old 2008-12-10 10:49:26.000000000 +0100 |
2 | +++ poldek-0.30-cvs20080820.23/misc.c 2008-12-10 10:49:56.000000000 +0100 | |
3 | @@ -646,6 +646,15 @@ static char *cut_country_code (const cha | |
4 | return newlang; | |
5 | } | |
6 | ||
7 | +static inline void n_array_push_check_dup(tn_array *langs, char *value) | |
8 | +{ | |
9 | + int i; | |
10 | + | |
11 | + for (i = 0; i < n_array_size(langs); i++) | |
12 | + if (strcmp(n_array_nth(langs, i), value) == 0) return; | |
13 | + n_array_push(langs, n_strdup(value)); | |
14 | +} | |
15 | + | |
16 | /* | |
17 | * lang_match_avlangs: | |
18 | * | |
19 | @@ -656,24 +665,33 @@ static char *cut_country_code (const cha | |
20 | static inline void lang_match_avlangs(tn_array *avlangs, tn_array *r_langs, | |
21 | const char *lang, int *has_C) | |
22 | { | |
23 | + char lang_utf8[32]; | |
24 | char *cut = NULL; | |
25 | - | |
26 | + | |
27 | /* first try */ | |
28 | if (n_array_bsearch(avlangs, lang)) { | |
29 | if (strcmp(lang, "C") == 0) | |
30 | *has_C = 1; | |
31 | - | |
32 | - n_array_push(r_langs, n_strdup(lang)); | |
33 | + | |
34 | + n_array_push_check_dup(r_langs, lang); | |
35 | } | |
36 | - | |
37 | + n_snprintf(lang_utf8, sizeof(lang_utf8), "%s.UTF-8", lang); | |
38 | + if (n_array_bsearch(avlangs, lang_utf8)) | |
39 | + n_array_push_check_dup(r_langs, lang_utf8); | |
40 | + | |
41 | /* second try, without country code */ | |
42 | if ((cut = cut_country_code(lang))) { | |
43 | if (n_array_bsearch(avlangs, cut)) { | |
44 | if (strcmp(cut, "C") == 0) | |
45 | *has_C = 1; | |
46 | - | |
47 | - n_array_push(r_langs, cut); | |
48 | + | |
49 | + n_array_push_check_dup(r_langs, cut); | |
50 | } | |
51 | + n_snprintf(lang_utf8, sizeof(lang_utf8), "%s.UTF-8", cut); | |
52 | + if (n_array_bsearch(avlangs, lang_utf8)) | |
53 | + n_array_push_check_dup(r_langs, lang_utf8); | |
54 | + | |
55 | + free(cut); | |
56 | } | |
57 | } | |
58 |