aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2014-12-15 23:55:30 +0200
committerMartin Storsjö <martin@martin.st>2014-12-19 23:24:47 +0200
commit8ebf02f8f530240edf7e45f35f7647ef9dd44a58 (patch)
tree470e582d937b3e2218113b670e3204a817db786d
parentfc308b30bb24e623fed042ec78b10803b2362a18 (diff)
downloadffmpeg-8ebf02f8f530240edf7e45f35f7647ef9dd44a58.tar.gz
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@martin.st>
-rwxr-xr-xconfigure2
-rw-r--r--libavformat/os_support.h19
2 files changed, 16 insertions, 5 deletions
diff --git a/configure b/configure
index ed8316fbb7..48669a0e27 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 49490655a9..6cc6d9aa2b 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