On 26/11/14 10:52, Martin Storsjö wrote: > This allows getting the normal unix semantics, where a rename > allows replacing an existing file. > > Based on a suggestion by Reimar Döffinger. > --- > configure | 2 ++ > libavformat/os_support.h | 21 +++++++++++++++++++-- > 2 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/configure b/configure > index 7b3faae..355a95b 100755 > --- a/configure > +++ b/configure > @@ -1466,6 +1466,7 @@ SYSTEM_FUNCS=" > localtime_r > mach_absolute_time > MapViewOfFile > + MoveFileExA > memalign > mkstemp > mmap > @@ -4096,6 +4097,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 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 4aa98bd..4949065 100644 > --- a/libavformat/os_support.h > +++ b/libavformat/os_support.h > @@ -170,14 +170,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) >
I'm fine with that and I guess everybody else. lu _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
