[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 10:21:23 CEST 2016


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?

Regards,

-- 
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/c2cde2f3/attachment.sig>


More information about the ffmpeg-devel mailing list