diff --git a/configure b/configure index 33280261e9..87be058fd3 100755 --- a/configure +++ b/configure @@ -1741,7 +1741,6 @@ SYSTEM_FUNCS=" lzo1x_999_compress mach_absolute_time MapViewOfFile - MoveFileExA memalign mkstemp mmap @@ -4759,7 +4758,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 PeekNamedPipe check_func_headers windows.h SetConsoleTextAttribute check_func_headers windows.h Sleep diff --git a/libavformat/os_support.h b/libavformat/os_support.h index ffae4b7293..a3329119c0 100644 --- a/libavformat/os_support.h +++ b/libavformat/os_support.h @@ -146,6 +146,18 @@ int ff_poll(struct pollfd *fds, nfds_t numfds, int timeout); #include #include "libavutil/wchar_filename.h" +#ifdef WINAPI_FAMILY +#include +// 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) \ { \ @@ -197,13 +209,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