|
|
|
@@ -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 |
|
|
|
|