# HG changeset patch # User iive # Date 1187619463 0 # Node ID f5b32d12b691b97909a05fbebdb1679694727e79 # Parent 71d17c28f545ec345acf20a0c0ef9f15524f5174 remove gconvert_uri_to_filename() and use url_unescape_string() instead. reasons: * gconvert strdup()s the original string, but it may exit without returning or freeing it. * gconvert returns the original pointer when no % escaping is done. It is then free()ed and used in that state. * gconvert doesn't consider that % may be at the end of the string and could continue parsing past the end. * gconvert would try to free() pointer that iconv() have modified. * gconvert would try to convert filenames from utf-8 to iso8859-1. Seems like no other DnD programs convert to utf-8 and/or honors CHARSET. Not converting seems to work best. Fix it if problem arises. diff -r 71d17c28f545 -r f5b32d12b691 gui/interface.c --- a/gui/interface.c Mon Aug 20 09:28:44 2007 +0000 +++ b/gui/interface.c Mon Aug 20 14:17:43 2007 +0000 @@ -157,49 +157,6 @@ (*list)[i] = gstrdup(replace); (*list)[i + 1] = NULL; } - -#ifdef USE_ICONV -char * gconvert_uri_to_filename( char * str ) -{ - iconv_t d; - char * out = strdup( str ); - char * tmp = NULL; - char * ize; - size_t inb,outb; - char * charset = "ISO8859-1"; - char * cs; - - if ( !strchr( str,'%' ) ) return str; - - { - char * t = calloc( 1,strlen( out ) ); - int i,c = 0; - for ( i=0;i < (int)strlen( out );i++ ) - if ( out[i] != '%' ) t[c++]=out[i]; - else - { - char tmp[5] = "0xXX"; -// if ( out[++i] == '%' ) { t[c++]='%'; continue; }; - tmp[2]=out[++i]; tmp[3]=out[++i]; - t[c++]=(char)strtol( tmp,(char **)NULL,0 ); - } - free( out ); - out=t; - } - - if ( (cs=getenv( "CHARSET" )) && *cs ) charset=cs; - - inb=outb=strlen( out ); - tmp=calloc( 1,outb + 1 ); - ize=tmp; - d=iconv_open( charset,"UTF-8" ); - if ( (iconv_t)(-1) == d ) return str; - iconv( d,&out,&inb,&tmp,&outb ); - iconv_close( d ); - free( out ); - return ize; -} -#endif void guiInit( void ) { diff -r 71d17c28f545 -r f5b32d12b691 gui/interface.h --- a/gui/interface.h Mon Aug 20 09:28:44 2007 +0000 +++ b/gui/interface.h Mon Aug 20 14:17:43 2007 +0000 @@ -210,7 +210,6 @@ extern void * gtkSet( int cmd,float param, void * vparam ); -extern char * gconvert_uri_to_filename( char * str ); extern char * gstrdup( const char * str ); extern int gstrcmp( const char * a,const char * b ); extern void gfree( void ** p ); diff -r 71d17c28f545 -r f5b32d12b691 gui/mplayer/mw.c --- a/gui/mplayer/mw.c Mon Aug 20 09:28:44 2007 +0000 +++ b/gui/mplayer/mw.c Mon Aug 20 14:17:43 2007 +0000 @@ -20,6 +20,7 @@ #include "../libvo/fastmemcpy.h" #include "../stream/stream.h" +#include "stream/url.h" #include "../mixer.h" #include "../libvo/sub.h" #include "../access_mpcontext.h" @@ -559,13 +560,7 @@ char* str = strdup( files[f] ); plItem* item; -#ifdef USE_ICONV - if ( strchr( str,'%' ) ) - { - char * tmp=gconvert_uri_to_filename( str ); - free( str ); str=tmp; - } -#endif + url_unescape_string(str, files[f]); if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) { /* this is not a directory so try to play it */