diff options
author | wm4 <wm4@mplayer2.org> | 2012-02-03 08:05:11 +0100 |
---|---|---|
committer | Uoti Urpala <uau@mplayer2.org> | 2012-03-09 20:48:54 +0200 |
commit | a1244111a790bbc4bf91b078ebcad3f415da79da (patch) | |
tree | bbbb99a7364b7ee4eaa96a44930f84a88db25090 /path.c | |
parent | 24be34f1e9e37111a06108c090324426aff6f1db (diff) | |
download | mpv-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 'path.c')
-rw-r--r-- | path.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -27,14 +27,15 @@ #include <stdlib.h> #include <string.h> #include <stdbool.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> #include "config.h" #include "mp_msg.h" #include "path.h" #ifdef CONFIG_MACOSX_BUNDLE #include <CoreFoundation/CoreFoundation.h> -#include <sys/types.h> -#include <sys/stat.h> #include <unistd.h> #elif defined(__MINGW32__) #include <windows.h> @@ -46,6 +47,7 @@ #include "talloc.h" #include "osdep/osdep.h" +#include "osdep/io.h" char *get_path(const char *filename){ char *homedir; @@ -232,3 +234,15 @@ char *mp_path_join(void *talloc_ctx, struct bstr p1, struct bstr p2) return talloc_asprintf(talloc_ctx, "%.*s%s%.*s", BSTR_P(p1), have_separator ? "" : "/", BSTR_P(p2)); } + +bool mp_path_exists(const char *path) +{ + struct stat st; + return mp_stat(path, &st) == 0; +} + +bool mp_path_isdir(const char *path) +{ + struct stat st; + return mp_stat(path, &st) == 0 && S_ISDIR(st.st_mode); +} |