lavf/os_support.h: Fix for unicode filenames on windows.
Fixes #819 #5256 #5281 Signed-off-by: Matt Oliver <protogonoi@gmail.com>
This commit is contained in:
parent
be37a66971
commit
37787f2616
@ -148,7 +148,11 @@ static int file_check(URLContext *h, int mask)
|
|||||||
ret |= AVIO_FLAG_WRITE;
|
ret |= AVIO_FLAG_WRITE;
|
||||||
#else
|
#else
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
# ifndef _WIN32
|
||||||
ret = stat(filename, &st);
|
ret = stat(filename, &st);
|
||||||
|
# else
|
||||||
|
ret = win32_stat(filename, &st);
|
||||||
|
# endif
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return AVERROR(errno);
|
return AVERROR(errno);
|
||||||
|
|
||||||
|
@ -182,6 +182,29 @@ DEF_FS_FUNCTION(unlink, _wunlink, _unlink)
|
|||||||
DEF_FS_FUNCTION(mkdir, _wmkdir, _mkdir)
|
DEF_FS_FUNCTION(mkdir, _wmkdir, _mkdir)
|
||||||
DEF_FS_FUNCTION(rmdir, _wrmdir , _rmdir)
|
DEF_FS_FUNCTION(rmdir, _wrmdir , _rmdir)
|
||||||
|
|
||||||
|
#define DEF_FS_FUNCTION2(name, wfunc, afunc, partype) \
|
||||||
|
static inline int win32_##name(const char *filename_utf8, partype par) \
|
||||||
|
{ \
|
||||||
|
wchar_t *filename_w; \
|
||||||
|
int ret; \
|
||||||
|
\
|
||||||
|
if (utf8towchar(filename_utf8, &filename_w)) \
|
||||||
|
return -1; \
|
||||||
|
if (!filename_w) \
|
||||||
|
goto fallback; \
|
||||||
|
\
|
||||||
|
ret = wfunc(filename_w, par); \
|
||||||
|
av_free(filename_w); \
|
||||||
|
return ret; \
|
||||||
|
\
|
||||||
|
fallback: \
|
||||||
|
/* filename may be be in CP_ACP */ \
|
||||||
|
return afunc(filename_utf8, par); \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEF_FS_FUNCTION2(access, _waccess, _access, int)
|
||||||
|
DEF_FS_FUNCTION2(stat, _wstat64, _stat64, struct stat*)
|
||||||
|
|
||||||
static inline int win32_rename(const char *src_utf8, const char *dest_utf8)
|
static inline int win32_rename(const char *src_utf8, const char *dest_utf8)
|
||||||
{
|
{
|
||||||
wchar_t *src_w, *dest_w;
|
wchar_t *src_w, *dest_w;
|
||||||
@ -231,6 +254,7 @@ fallback:
|
|||||||
#define rename win32_rename
|
#define rename win32_rename
|
||||||
#define rmdir win32_rmdir
|
#define rmdir win32_rmdir
|
||||||
#define unlink win32_unlink
|
#define unlink win32_unlink
|
||||||
|
#define access win32_access
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user