]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/os_support.h
Merge commit '393596f9d51134d6e45d81ae129223f4faea1232'
[ffmpeg] / libavformat / os_support.h
index a3329119c0b587f21f1dc5f8a40266e0f5abafbf..caf1a2fab476d08369c3b2ca23ae806cc09f81c0 100644 (file)
@@ -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