X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fos_support.h;h=caf1a2fab476d08369c3b2ca23ae806cc09f81c0;hb=f36fcf7b6cc40cfcad0642cc1c6ed0ceb39b2143;hp=a3329119c0b587f21f1dc5f8a40266e0f5abafbf;hpb=e811ebcd9cd5223239d72c07c79d63ec51ac3259;p=ffmpeg diff --git a/libavformat/os_support.h b/libavformat/os_support.h index a3329119c0b..caf1a2fab47 100644 --- a/libavformat/os_support.h +++ b/libavformat/os_support.h @@ -182,6 +182,29 @@ DEF_FS_FUNCTION(unlink, _wunlink, _unlink) DEF_FS_FUNCTION(mkdir, _wmkdir, _mkdir) 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, _wstati64, _stati64, struct stat*) + static inline int win32_rename(const char *src_utf8, const char *dest_utf8) { wchar_t *src_w, *dest_w; @@ -231,6 +254,7 @@ fallback: #define rename win32_rename #define rmdir win32_rmdir #define unlink win32_unlink +#define access win32_access #endif