summaryrefslogtreecommitdiffstats
path: root/libmpdemux/mf.c
diff options
context:
space:
mode:
authorwm4 <wm4@mplayer2.org>2012-02-03 08:05:11 +0100
committerUoti Urpala <uau@mplayer2.org>2012-03-09 20:48:54 +0200
commita1244111a790bbc4bf91b078ebcad3f415da79da (patch)
treebbbb99a7364b7ee4eaa96a44930f84a88db25090 /libmpdemux/mf.c
parent24be34f1e9e37111a06108c090324426aff6f1db (diff)
downloadmpv-a1244111a790bbc4bf91b078ebcad3f415da79da.tar.bz2
mpv-a1244111a790bbc4bf91b078ebcad3f415da79da.tar.xz
windows support: unicode filenames
Windows uses a legacy codepage for char* / runtime functions accepting char *. Using UTF-8 as the codepage with setlocale() is explicitly forbidden. Work this around by overriding the MSVCRT functions with wrapper macros, that assume UTF-8 and use "proper" API calls like _wopen etc. to deal with unicode filenames. All code that uses standard functions that take or return filenames must now include osdep/io.h. stat() can't be overridden, because MinGW-w64 itself defines "stat" as a macro. Change code to use use mp_stat() instead. This is not perfectly clean, but still somewhat sane, and much better than littering the rest of the mplayer code with MinGW specific hacks. It's also a bit fragile, but that's actually little different from the previous situation. Also, MinGW is unlikely to ever include a nice way of dealing with this.
Diffstat (limited to 'libmpdemux/mf.c')
-rw-r--r--libmpdemux/mf.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/libmpdemux/mf.c b/libmpdemux/mf.c
index 6b22c6147d..d232944593 100644
--- a/libmpdemux/mf.c
+++ b/libmpdemux/mf.c
@@ -25,7 +25,8 @@
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
-#include <sys/stat.h>
+
+#include "osdep/io.h"
#include "config.h"
@@ -38,6 +39,7 @@
#include "mp_msg.h"
#include "stream/stream.h"
+#include "path.h"
#include "mf.h"
@@ -49,7 +51,6 @@ char * mf_type = NULL; //"jpg";
mf_t* open_mf(char * filename){
#if defined(HAVE_GLOB) || defined(__MINGW32__)
glob_t gg;
- struct stat fs;
int i;
char * fname;
mf_t * mf;
@@ -63,13 +64,13 @@ mf_t* open_mf(char * filename){
FILE *lst_f=fopen(filename + 1,"r");
if ( lst_f )
{
- fname=malloc(PATH_MAX);
- while ( fgets( fname,PATH_MAX,lst_f ) )
+ fname=malloc(MP_PATH_MAX);
+ while ( fgets( fname,MP_PATH_MAX,lst_f ) )
{
/* remove spaces from end of fname */
char *t=fname + strlen( fname ) - 1;
while ( t > fname && isspace( *t ) ) *(t--)=0;
- if ( stat( fname,&fs ) )
+ if ( !mp_path_exists( fname ) )
{
mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );
}
@@ -94,7 +95,7 @@ mf_t* open_mf(char * filename){
while ( ( fname=strsep( &filename,"," ) ) )
{
- if ( stat( fname,&fs ) )
+ if ( !mp_path_exists( fname ) )
{
mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );
}
@@ -130,8 +131,8 @@ mf_t* open_mf(char * filename){
for( i=0;i < gg.gl_pathc;i++ )
{
- stat( gg.gl_pathv[i],&fs );
- if( S_ISDIR( fs.st_mode ) ) continue;
+ if (mp_path_isdir(gg.gl_pathv[i]))
+ continue;
mf->names[i]=strdup( gg.gl_pathv[i] );
// mp_msg( MSGT_STREAM,MSGL_DBG2,"[mf] added file %d.: %s\n",i,mf->names[i] );
}
@@ -144,7 +145,7 @@ mf_t* open_mf(char * filename){
while ( error_count < 5 )
{
sprintf( fname,filename,count++ );
- if ( stat( fname,&fs ) )
+ if ( !mp_path_exists( fname ) )
{
error_count++;
mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );