#! /bin/sh /usr/share/dpatch/dpatch-run ## 01_mp3-ogg-conv-utf8.dpatch by Thomas Günther ## http://toms-cafe.de/vdr/download/mp3-0.9.15-ogg-conv-utf8.diff ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Converts ogginfos from utf8 to the setup charset. @DPATCH@ --- mp3-0.9.15/decoder-ogg.c +++ mp3-0.9.15/decoder-ogg.c @@ -28,6 +28,28 @@ #include "common.h" #include "decoder-ogg.h" +#include +#include +#include +static char *ConvertFromUTF8(const char *text) +{ + if (!text) return NULL; + char *buffer = strdup(text); + iconv_t ic = iconv_open(I18nCharSets()[Setup.OSDLanguage], "UTF8"); + if (ic >= 0) { + char *in = (char *)text; + char *out = buffer; + size_t inbytesleft = strlen(text); + size_t outbytesleft = inbytesleft; + if (iconv(ic, &in, &inbytesleft, &out, &outbytesleft) != (size_t)(-1)) + *out = 0; + else + strcpy(buffer, text); + iconv_close(ic); + } + return buffer; +} + // --- cOggFile ---------------------------------------------------------------- cOggFile::cOggFile(const char *Filename) @@ -166,13 +188,13 @@ const int len=p-cc; p++; if(!strncasecmp(cc,"TITLE",len)) { - if(!Title) Title=strdup(p); + if(!Title) Title=ConvertFromUTF8(p); } else if(!strncasecmp(cc,"ARTIST",len)) { - if(!Artist) Artist=strdup(p); + if(!Artist) Artist=ConvertFromUTF8(p); } else if(!strncasecmp(cc,"ALBUM",len)) { - if(!Album) Album=strdup(p); + if(!Album) Album=ConvertFromUTF8(p); } else if(!strncasecmp(cc,"YEAR",len)) { if(Year<0) {