diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-11-27 11:35:54 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-27 11:35:54 +0100 |
commit | cc663bd13a97a92a3b3ba838393e77f2e1c490ad (patch) | |
tree | 64548f2cbc0ba8461b3ea7e3ea9c0ab63976c94f | |
parent | 097de4d1d68fb5aef5fc8881b2afc65db3f0dac0 (diff) | |
parent | 79fd186a5035cf16fc0ab288d8f59da8b1ba2c0e (diff) | |
download | ffmpeg-cc663bd13a97a92a3b3ba838393e77f2e1c490ad.tar.gz |
Merge commit '79fd186a5035cf16fc0ab288d8f59da8b1ba2c0e'
* commit '79fd186a5035cf16fc0ab288d8f59da8b1ba2c0e':
lavf: Use MoveFileEx instead of rename/_wrename on windows
Conflicts:
configure
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | libavformat/os_support.h | 21 |
2 files changed, 21 insertions, 2 deletions
@@ -1732,6 +1732,7 @@ SYSTEM_FUNCS=" lzo1x_999_compress mach_absolute_time MapViewOfFile + MoveFileExA memalign mkstemp mmap @@ -4736,6 +4737,7 @@ 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 73b7f9f65b..ffae4b7293 100644 --- a/libavformat/os_support.h +++ b/libavformat/os_support.h @@ -187,14 +187,31 @@ static inline int win32_rename(const char *src_utf8, const char *dest_utf8) goto fallback; } - ret = _wrename(src_w, dest_w); + ret = MoveFileExW(src_w, dest_w, MOVEFILE_REPLACE_EXISTING); av_free(src_w); av_free(dest_w); + // Lacking proper mapping from GetLastError() error codes to errno codes + if (ret) + errno = EPERM; return ret; fallback: /* filename may be be in CP_ACP */ - return rename(src_utf8, dest_utf8); +#if HAVE_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 + * 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 + * store apps (or windows phone), and the notion of a native code page + * doesn't make much sense there. */ + ret = rename(src_utf8, dest_utf8); +#endif + return ret; } #define mkdir(a, b) win32_mkdir(a) |