[FFmpeg-devel] [FFmpeg-cvslog] lavf/os_support.h: Fix for unicode filenames on windows.
Clément Bœsch
u at pkh.me
Mon Jun 13 23:10:39 CEST 2016
On Tue, Jun 14, 2016 at 07:08:58AM +1000, Matt Oliver wrote:
> On 13 June 2016 at 18:29, Benoit Fouet <benoit.fouet at free.fr> wrote:
>
> > Hi,
> >
> >
> >
> > On 13/06/2016 10:21, Clément Bœsch wrote:
> >
> >> On Mon, Jun 13, 2016 at 05:50:18AM +0200, Matt Oliver wrote:
> >>
> >>> ffmpeg | branch: master | Matt Oliver <protogonoi at gmail.com> | Mon Jun
> >>> 6 17:04:39 2016 +1000| [37787f261639c53998487400e874741c17e85fc6] |
> >>> committer: Matt Oliver
> >>>
> >>> lavf/os_support.h: Fix for unicode filenames on windows.
> >>>
> >>> Fixes #819 #5256 #5281
> >>>
> >>> Signed-off-by: Matt Oliver <protogonoi at gmail.com>
> >>>
> >>>
> >>>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=37787f261639c53998487400e874741c17e85fc6
> >>>>
> >>> ---
> >>>
> >>> libavformat/file.c | 4 ++++
> >>> libavformat/os_support.h | 24 ++++++++++++++++++++++++
> >>> 2 files changed, 28 insertions(+)
> >>>
> >>> diff --git a/libavformat/file.c b/libavformat/file.c
> >>> index 5765ce7..264542a 100644
> >>> --- a/libavformat/file.c
> >>> +++ b/libavformat/file.c
> >>> @@ -148,7 +148,11 @@ static int file_check(URLContext *h, int mask)
> >>> ret |= AVIO_FLAG_WRITE;
> >>> #else
> >>> struct stat st;
> >>> +# ifndef _WIN32
> >>> ret = stat(filename, &st);
> >>> +# else
> >>> + ret = win32_stat(filename, &st);
> >>> +# endif
> >>>
> >> why this chunk?
> >>
> >> if (ret < 0)
> >>> return AVERROR(errno);
> >>> diff --git a/libavformat/os_support.h b/libavformat/os_support.h
> >>> index a332911..9e312a5 100644
> >>> --- a/libavformat/os_support.h
> >>> +++ b/libavformat/os_support.h
> >>> @@ -182,6 +182,29 @@ DEF_FS_FUNCTION(unlink, _wunlink, _unlink)
> >>> DEF_FS_FUNCTION(mkdir, _wmkdir, _mkdir)
> >>> DEF_FS_FUNCTION(rmdir, _wrmdir , _rmdir)
> >>> +#define DEF_FS_FUNCTION2(name, wfunc, afunc, partype) \
> >>> +static inline int win32_##name(const char *filename_utf8, partype par) \
> >>> +{ \
> >>> + wchar_t *filename_w; \
> >>> + int ret; \
> >>> + \
> >>> + if (utf8towchar(filename_utf8, &filename_w)) \
> >>> + return -1; \
> >>> + if (!filename_w) \
> >>> + goto fallback; \
> >>> + \
> >>> + ret = wfunc(filename_w, par); \
> >>> + av_free(filename_w); \
> >>> + return ret; \
> >>> + \
> >>> +fallback: \
> >>> + /* filename may be be in CP_ACP */ \
> >>> + return afunc(filename_utf8, par); \
> >>> +}
> >>> +
> >>> +DEF_FS_FUNCTION2(access, _waccess, _access, int)
> >>> +DEF_FS_FUNCTION2(stat, _wstat64, _stat64, struct stat*)
> >>> +
> >>> static inline int win32_rename(const char *src_utf8, const char
> >>> *dest_utf8)
> >>> {
> >>> wchar_t *src_w, *dest_w;
> >>> @@ -231,6 +254,7 @@ fallback:
> >>> #define rename win32_rename
> >>> #define rmdir win32_rmdir
> >>> #define unlink win32_unlink
> >>> +#define access win32_access
> >>>
> >>>
> >> ...instead of #define stat win32_stat here?
> >>
> >
> > as already noted by someone else, this should be
> > #define stat(a, b) win32_stat((a), (b))
> > in order not to conflict with "struct stat" definition.
> >
>
> As stated in the original patch thread a define for the win32_stat function
> can not be used as there is already a define for the 'stat' struct.
> So using:
> #define stat(a, b) win32_stat((a), (b))
> clashes with the existing
> #define stat _stat64
>
> Since there is a stat function and a stat struct then a macro can only be
> used for one of them and there is already an object macro for the stat
> struct.
> If the suggested "#define stat(a, b) win32_stat((a), (b))" was added this
> overrides the struct macro causing the compiler not to use _stat64 and use
> a 32 variant instead which results in memory corruption.
Sorry, I wasn't following the thread, I just happened to read cvslog.
A comment in the source would probably be welcome though, no one is going
to be aware of these discussions in the future.
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160613/3675e7a1/attachment.sig>
More information about the ffmpeg-devel
mailing list