mbox series

[FFmpeg-devel,v5,0/2] Support long file names on Windows

Message ID pull.28.v5.ffstaging.FFmpeg.1653381808.ffmpegagent@gmail.com
Headers show
Series Support long file names on Windows | expand

Message

softworkz May 24, 2022, 8:43 a.m. UTC
This patchset adds support for long file and directory paths on Windows. The
implementation follows the same logic that .NET is using internally, with
the only exception that it doesn't expand short path components in 8.3
format. .NET does this as the same function is also used for other purposes,
but in our case, that's not required. Short (8.3) paths are working as well
with the extended path prefix, even when longer than 260.

Successfully tested:

 * Regular paths wth drive letter
 * Regular UNC paths
 * Long paths wth drive letter
 * Long paths wth drive letter and forward slashes
 * Long UNC paths
 * Prefixed paths wth drive letter
 * Prefixed UNC paths

I have kept the individual functions separate on purpose, to make it easy to
compare with the .NET impl. (compilers should inlinie those anyway)

v2

 * wchar_filename: Improve comments and function documentation
 * os_support: adjust defines to use win32_stat

v3

 * removed length check in path_is_extended()
 * added path_is_device_path() check in add_extended_prefix()
 * add_extended_prefix(): clarified doc and add checks
 * clarified string allocation length calculation
 * replaced 260 with MAX_PATH
 * removed redundant checks after normalization

v4

 * rebased. no changes

v5

 * resolved the ugly struct duplication
 * compatible with _USE_32BIT_TIME_T

softworkz (2):
  avutil/wchar_filename,file_open: Support long file names on Windows
  avformat/os_support: Support long file names on Windows

 libavformat/os_support.h   |  16 ++--
 libavutil/file_open.c      |   2 +-
 libavutil/wchar_filename.h | 166 +++++++++++++++++++++++++++++++++++++
 3 files changed, 178 insertions(+), 6 deletions(-)


base-commit: 6076dbcb55d0c9b6693d1acad12a63f7268301aa
Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-28%2Fsoftworkz%2Fsubmit_long_filenames-v5
Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-28/softworkz/submit_long_filenames-v5
Pull-Request: https://github.com/ffstaging/FFmpeg/pull/28

Range-diff vs v4:

 1:  13118dc1fa = 1:  13118dc1fa avutil/wchar_filename,file_open: Support long file names on Windows
 2:  252ed89499 ! 2:  5313aeec0e avformat/os_support: Support long file names on Windows
     @@ libavformat/os_support.h
      +
      +    struct win32_stat
      +    {
     -+        _dev_t         st_dev;
     -+        _ino_t         st_ino;
     -+        unsigned short st_mode;
     -+        short          st_nlink;
     -+        short          st_uid;
     -+        short          st_gid;
     -+        _dev_t         st_rdev;
     -+        __int64        st_size;
     -+        __time64_t     st_atime;
     -+        __time64_t     st_mtime;
     -+        __time64_t     st_ctime;
     ++        struct _stati64;
      +    };
      +
       #  ifdef fstat