Update of /cvsroot/mplayer/main/Gui In directory mail:/var/tmp.root/cvs-serv29461/Gui Modified Files: interface.c interface.h Log Message: add uri2filename converter Index: interface.c =================================================================== RCS file: /cvsroot/mplayer/main/Gui/interface.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- interface.c 11 Aug 2002 18:07:42 -0000 1.35 +++ interface.c 14 Aug 2002 12:16:50 -0000 1.36 @@ -29,6 +29,14 @@ #include <inttypes.h> #include <sys/types.h> +#ifdef USE_ICONV + #ifdef __FreeBSD__ + #include <giconv.h> + #else + #include <iconv.h> + #endif +#endif + #include "../libmpdemux/stream.h" #include "../libmpdemux/demuxer.h" @@ -76,6 +84,49 @@ else gstrcat( str,what ); } +#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[4] = "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 ) { memset( &guiIntfStruct,0,sizeof( guiIntfStruct ) ); Index: interface.h =================================================================== RCS file: /cvsroot/mplayer/main/Gui/interface.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- interface.h 4 Aug 2002 19:23:56 -0000 1.18 +++ interface.h 14 Aug 2002 12:16:50 -0000 1.19 @@ -171,6 +171,7 @@ extern void * gtkSet( int cmd,float param, void * vparam ); +extern char * gconvert_uri_to_filename( char * str ); extern char * gstrdup( char * str ); extern int gstrcmp( char * a,char * b ); extern void gfree( void ** p );