path: root/stream
diff options
authorwm4 <>2012-02-03 08:05:11 +0100
committerUoti Urpala <>2012-03-09 20:48:54 +0200
commita1244111a790bbc4bf91b078ebcad3f415da79da (patch)
treebbbb99a7364b7ee4eaa96a44930f84a88db25090 /stream
parent24be34f1e9e37111a06108c090324426aff6f1db (diff)
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 'stream')
3 files changed, 7 insertions, 7 deletions
diff --git a/stream/cookies.c b/stream/cookies.c
index 3b266a5ca2..e50274a248 100644
--- a/stream/cookies.c
+++ b/stream/cookies.c
@@ -31,6 +31,8 @@
#include <inttypes.h>
#include <limits.h>
+#include "osdep/io.h"
#include "cookies.h"
#include "http.h"
#include "mp_msg.h"
diff --git a/stream/stream_cddb.c b/stream/stream_cddb.c
index afc512e5b7..aab557ab86 100644
--- a/stream/stream_cddb.c
+++ b/stream/stream_cddb.c
@@ -36,11 +36,8 @@
#include <unistd.h>
#include <string.h>
#include <limits.h>
+#include "osdep/io.h"
#if defined(__MINGW32__) || defined(__CYGWIN__)
-#ifdef __MINGW32__
-#include <path.h>
-#define mkdir(a,b) mkdir(a)
#include <windows.h>
#include <winsock2.h>
@@ -53,6 +50,7 @@
#include <sys/stat.h>
#include "mp_msg.h"
+#include "path.h"
#if defined(__linux__)
#include <linux/cdrom.h>
@@ -472,7 +470,6 @@ static int cddb_read_cache(cddb_data_t *cddb_data)
static int cddb_write_cache(cddb_data_t *cddb_data)
// We have the file, save it for cache.
- struct stat file_stat;
char file_name[100];
int file_fd, ret;
int wrote = 0;
@@ -481,8 +478,7 @@ static int cddb_write_cache(cddb_data_t *cddb_data)
return -1;
// Check if the CDDB cache dir exist
- ret = stat(cddb_data->cache_dir, &file_stat);
- if (ret < 0) {
+ if (!mp_path_exists(cddb_data->cache_dir)) {
// Directory not present, create it.
ret = mkdir(cddb_data->cache_dir, 0755);
#ifdef __MINGW32__
diff --git a/stream/stream_file.c b/stream/stream_file.c
index 6d436cf6f5..e9bb3eb03a 100644
--- a/stream/stream_file.c
+++ b/stream/stream_file.c
@@ -24,6 +24,8 @@
#include <fcntl.h>
#include <unistd.h>
+#include "osdep/io.h"
#include "mp_msg.h"
#include "stream.h"
#include "m_option.h"