[FFmpeg-cvslog] libavformat: Only use MoveFileExA when targeting the desktop API subset

Martin Storsjö git at videolan.org
Sat Dec 20 01:12:55 CET 2014


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Mon Dec 15 23:55:30 2014 +0200| [8ebf02f8f530240edf7e45f35f7647ef9dd44a58] | committer: Martin Storsjö

libavformat: Only use MoveFileExA when targeting the desktop API subset

The MoveFileExA is available in the headers regardless which API
subset is targeted, but it is missing in the Windows Phone link
libraries. When targeting Windows Store apps, the function is
available both in the headers and in the link libraries, and thus
there is no indication for the build system that this function
should be avoided - such an indication is only given by the
Windows App Certification Kit, which forbids using the MoveFileExA
function.

Therefore check the WINAPI_FAMILY defines instead, to figure out
which API subset is targeted.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8ebf02f8f530240edf7e45f35f7647ef9dd44a58
---

 configure                |    2 --
 libavformat/os_support.h |   19 ++++++++++++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/configure b/configure
index ed8316f..48669a0 100755
--- a/configure
+++ b/configure
@@ -1466,7 +1466,6 @@ SYSTEM_FUNCS="
     localtime_r
     mach_absolute_time
     MapViewOfFile
-    MoveFileExA
     memalign
     mkstemp
     mmap
@@ -4100,7 +4099,6 @@ check_func_headers windows.h GetProcessAffinityMask
 check_func_headers windows.h GetProcessTimes
 check_func_headers windows.h GetSystemTimeAsFileTime
 check_func_headers windows.h MapViewOfFile
-check_func_headers windows.h MoveFileExA
 check_func_headers windows.h SetConsoleTextAttribute
 check_func_headers windows.h Sleep
 check_func_headers windows.h VirtualAlloc
diff --git a/libavformat/os_support.h b/libavformat/os_support.h
index 4949065..6cc6d9a 100644
--- a/libavformat/os_support.h
+++ b/libavformat/os_support.h
@@ -129,6 +129,18 @@ int ff_poll(struct pollfd *fds, nfds_t numfds, int timeout);
 #include <windows.h>
 #include "libavutil/wchar_filename.h"
 
+#ifdef WINAPI_FAMILY
+#include <winapifamily.h>
+// If a WINAPI_FAMILY is defined, check that the desktop API subset
+// is enabled
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+#define USE_MOVEFILEEXA
+#endif
+#else
+// If no WINAPI_FAMILY is defined, assume the full API subset
+#define USE_MOVEFILEEXA
+#endif
+
 #define DEF_FS_FUNCTION(name, wfunc, afunc)               \
 static inline int win32_##name(const char *filename_utf8) \
 {                                                         \
@@ -180,13 +192,14 @@ static inline int win32_rename(const char *src_utf8, const char *dest_utf8)
 
 fallback:
     /* filename may be be in CP_ACP */
-#if HAVE_MOVEFILEEXA
+#ifdef USE_MOVEFILEEXA
     ret = MoveFileExA(src_utf8, dest_utf8, MOVEFILE_REPLACE_EXISTING);
     if (ret)
         errno = EPERM;
 #else
-    /* Windows Phone doesn't have MoveFileExA. However, it's unlikely
-     * that anybody would input filenames in CP_ACP there, so this
+    /* Windows Phone doesn't have MoveFileExA, and for Windows Store apps,
+     * it is available but not allowed by the app certification kit. However,
+     * it's unlikely that anybody would input filenames in CP_ACP there, so this
      * fallback is kept mostly for completeness. Alternatively we could
      * do MultiByteToWideChar(CP_ACP) and use MoveFileExW, but doing
      * explicit conversions with CP_ACP is allegedly forbidden in windows



More information about the ffmpeg-cvslog mailing list