[MPlayer-dev-eng] [PATCH] use system locale instead of C locale

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sun May 31 15:14:38 CEST 2009


On Sun, May 24, 2009 at 02:37:33PM +0900, KO Myung-Hun wrote:
> KO Myung-Hun wrote:
> > Reimar Döffinger wrote:
> >> On Tue, May 19, 2009 at 11:20:02PM +0900, KO Myung-Hun wrote:
> >>  
> >>> I've fixed by allocating buffer for 'charset'. OS/2 implementation 
> >>> of nl_langinfo( CODESET ) returns the static variable. So even 
> >>> though if we got 'charset' by setting locale to system one, it is 
> >>> changed to new one after setting locale to C. But we should accept 
> >>> memory-leak. Fine ?
> >>>     
> >>
> >> The generic (in getch2.c) code needs the same change.
> >> Also the code for getch2-win.c should be changed to use malloced memory
> >> too, and get_term_charset get a documentation stating it will return
> >> a malloced string.
> >
> > Ok. I'll do that later.
> 
> I did.

Applied though I extended the documentation and instead added it to the
declaration in mp_msg.c

> >> IMO unless someone has a better idea, the source charset should just be
> >> set to UTF-8.
> >>   
> >
> > I think we'd better introduce a option whether to use UTF-8 or 
> > national characters for URL such as -usenlsurl as IE does.
> >
> 
> I used 'MPLAYER_CHARSET'. If it is not set, UTF-8 is used.

I don't really care (it currently is broken anyway and can't really get
any worse), but MPLAYER_CHARSET is supposed to be the charset used for
output, not the command line/URLs, at least that's how it is documented
I think.

> Index: stream/asf_mmst_streaming.c
> ===================================================================
> --- stream/asf_mmst_streaming.c	(revision 29289)
> +++ stream/asf_mmst_streaming.c	(working copy)
> @@ -533,6 +533,9 @@
>    char                *path, *unescpath;
>    URL_t *url1 = stream->streaming_ctrl->url;
>    int s = stream->fd;
> +#ifdef CONFIG_ICONV
> +  const char *url_charset;
> +#endif
> 
>    if( s>0 ) {
>  	  closesocket( stream->fd );
> @@ -574,12 +577,12 @@
> 
>    /* prepare for the url encoding conversion */
>  #ifdef CONFIG_ICONV
> -#ifdef HAVE_LANGINFO
> -  url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET));
> -#else
> -  url_conv = iconv_open("UTF-16LE", NULL);
> +  url_charset = getenv("MPLAYER_CHARSET");
> +  if (!url_charset)
> +    url_charset = "UTF-8";
> +
> +  url_conv = iconv_open("UTF-16LE", url_charset);
>  #endif
> -#endif

I removed the nl_langinfo stuff which should at least reduce the size of
this diff a bit.
I still think it is ugly, but probably misusing mp_msg_charset might be
the best solution.
On the other hand, I think it would collide with proper support of
unicode files/URLs on Windows, because there the commandline would be
passed in as UTF16-LE (and we'd probably convert to UTF-8), so then the
commandline (and thus URL) charset has no relation at all with the
terminal charset...



More information about the MPlayer-dev-eng mailing list