--- poldek-0.20.1-cvs20070108.22/pkgdir/pndir/description.c.stare 2007-05-29 22:39:55.000000000 +0200 +++ poldek-0.20.1-cvs20070108.22/pkgdir/pndir/description.c 2007-05-30 15:11:58.000000000 +0200 @@ -166,6 +166,7 @@ for (i = n_array_size(langs) - 1; i >= 0; i--) { struct tndb *db; const char *lang; + char lang_utf8[24]; char dkey[512]; int dklen; @@ -176,6 +177,19 @@ if ((db = pndir_db_dscr_h_get(db_dscr_h, lang)) == NULL) continue; + snprintf(lang_utf8, sizeof(lang_utf8), "%s.UTF-8", lang); + + dklen = n_snprintf(dkey, sizeof(dkey), "%s%s", key, lang_utf8); + vlen = tndb_get(db, dkey, dklen, val, sizeof(val)); + DBGF("ld %s: %s (%d)\n", pkg_snprintf_s(pkg), lang_utf8, vlen); + if (vlen > 0) { + tn_buf_it it; + n_buf_clean(nbuf); + n_buf_init(nbuf, val, vlen); + n_buf_it_init(&it, nbuf); + pkguinf_restore_i18n(pkgu, &it, lang_utf8); + } + dklen = n_snprintf(dkey, sizeof(dkey), "%s%s", key, lang); vlen = tndb_get(db, dkey, dklen, val, sizeof(val)); DBGF("ld %s: %s (%d)\n", pkg_snprintf_s(pkg), lang, vlen); --- poldek-0.20.1-cvs20070108.22/pkgu.c.stare 2007-05-29 21:40:39.000000000 +0200 +++ poldek-0.20.1-cvs20070108.22/pkgu.c 2007-05-30 16:37:16.000000000 +0200 @@ -15,6 +15,8 @@ */ #include +#include +#include #include #include #include @@ -576,7 +576,27 @@ return 0; description = n_buf_it_getz(it, &dlen); - inf = pkguinf_i18n_new(pkgu->_na, summary, description); + if (strstr(lang, "UTF-8")) { + iconv_t cd; + size_t u_slen = slen, u_dlen = dlen; + char *new_s, *new_d; + char *summary_utf8 = n_malloc(u_slen + 1); + char *description_utf8 = n_malloc(u_dlen + 1); + + new_s = summary_utf8; + new_d = description_utf8; + cd = iconv_open(nl_langinfo(CODESET), "UTF-8"); + iconv(cd, &summary, &slen, &new_s, &u_slen); + iconv(cd, &description, &dlen, &new_d, &u_dlen); + iconv_close(cd); + *new_s = '\0'; + *new_d = '\0'; + inf = pkguinf_i18n_new(pkgu->_na, summary_utf8, description_utf8); + n_free(summary_utf8); + n_free(description_utf8); + } else { + inf = pkguinf_i18n_new(pkgu->_na, summary, description); + } n_hash_insert(pkgu->_ht, lang, inf); pkgu->summary = inf->summary;