From: Soft Works <softworkz@hotmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] avutil/wchar_filename, file_open: Support long file names on Windows Date: Mon, 16 May 2022 21:14:14 +0000 Message-ID: <DM8P223MB0365AA0CC6D96BA33EEEBE03BACF9@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> (raw) In-Reply-To: <ea-mime-6282075b-63fd-5d90a0db@www-7.mailo.com> > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of nil- > admirari@mailo.com > Sent: Monday, May 16, 2022 10:12 AM > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] avutil/wchar_filename, > file_open: Support long file names on Windows > > > +static inline int path_is_extended(const wchar_t *path) > > +{ > > + size_t len = wcslen(path); > > + if (len >= 4 && path[0] == L'\\' && (path[1] == L'\\' || path[1] > == L'?') && path[2] == L'?' && path[3] == L'\\') > > Length check is probably unnecessary: comparisons will reject '\0' > and further comparisons won't run due to short-circuiting. Yup, I think you're right, even though it would appear "unsafe" at first sight. I've removed the length check. > > + // The length of unc_prefix is 6 plus 1 for terminating zeros > > + temp_w = (wchar_t *)av_calloc(len + 6 + 1, sizeof(wchar_t)); > > Not really true. The length of unc_prefix is 8. > 2 is subtracted because UNC path already has \\ at the beginning. Correct. It actually needs to be "len - 2 + 8 + 1". I've updated the comment and the calculation. > > + if (len >= 260 || (*ppath_w)[len - 1] == L' ' || (*ppath_w)[len - > 1] == L'.') { > > 1. Please change 260 to MAX_PATH. Done. > 2. GetFullPathName removes trailing spaces and dots, so the second > part is always false. Yea, when someone would want to handle such (weird) kind of path, one would need to specify an extended path directly. Removed the second part. > > We already have win32_stat, but what's a bit tricky is that the > > struct that this function takes as a parameter is named the same > > as the function itself. > > Sorry, I thought is was a definition of a function, not a struct. > Since stat function is already defined as win32_stat, > It's better to revert the changes. stat wasn't already defined as win32_stat. win32_stat was already defined but not mapped. That's what my change does. > > The functions are needed in both. file_open.c cannot be included > > in libavformat/os_support.h and neither the other way round, > > so they need to be in a 3rd place. How about renaming > > wchar_filename.h to windows_filename.h ? > > Probably it's better to rename. OK, but let's do this in subsequent patch shortly after. > > I have skipped those checks because we won't have partially > qualified > > paths at this point (due to having called GetFullPathNameW) and > > device paths are not allowed to be longer than 260, so this it might > > happen that the UNC prefix gets added, but only when it's a long > > path which doesn't work anyway (I've tested those cases). > > I think it's better to test for \\.\ explicitly in path_is_extended: > 1. It's not obvious that \\.\ aren't allowed to be long. > 2. Probably FFmpeg is not going to have a longPathAware manifest, > but it can be linked with an EXE with such a manifest. > Would MAX_PATH restriction still apply? That's a good question, but we need to be clear that device paths are actually intended for accessing devices, e.g. like \\.\COM1 The fact that the prefix also works with a drive-letter path is more due to some heritage and nobody would normally want to use such kind of paths to access files. That being said, I've added a check (path_is_device_path()) for this now in the same way as .NET is doing it - which means inside add_extended_prefix(). > You have the checks inside of get_extended_win32_path and none > inside of add_extended_prefix. Yet add_extended_prefix can be called > by anyone: it's not private. Thus add_extended_prefix either should be > inlined, > or it should have the necessary checks in place. Otherwise you end up > with > an API that's easy to use incorrectly and hard to use correctly, and > it should be the other way around. I have added checks there now for both device path and extended path prefix. I have also clarified the function doc even further, so I hope it's sufficiently clear now. ;-) > > And what's the point about this? > > Point is obvious: extended paths are difficult to handle correctly. > get_extended_win32_path cannot be used on its own, only as a final > step before getting FILE* or a file descriptor. Yes, that's how it's meant to be used, so the whole application can be kept free from dealing with it. Thanks again for the review, these were some good improvements. Kind regards, softworkz _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-05-16 21:14 UTC|newest] Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-05-13 9:53 [FFmpeg-devel] [PATCH 0/2] " ffmpegagent 2022-05-13 9:53 ` [FFmpeg-devel] [PATCH 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-15 19:02 ` nil-admirari 2022-05-15 20:24 ` Soft Works 2022-05-16 8:34 ` nil-admirari 2022-05-13 9:53 ` [FFmpeg-devel] [PATCH 2/2] avformat/os_support: " softworkz 2022-05-15 19:13 ` nil-admirari 2022-05-15 22:14 ` Soft Works 2022-05-16 8:19 ` nil-admirari 2022-05-13 10:02 ` [FFmpeg-devel] [PATCH 0/2] " Soft Works 2022-05-15 19:36 ` nil-admirari 2022-05-15 20:31 ` Soft Works 2022-05-16 8:45 ` nil-admirari 2022-05-17 0:37 ` Soft Works 2022-05-15 22:17 ` [FFmpeg-devel] [PATCH v2 " ffmpegagent 2022-05-15 22:17 ` [FFmpeg-devel] [PATCH v2 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-16 8:12 ` nil-admirari 2022-05-16 21:14 ` Soft Works [this message] 2022-05-17 15:06 ` nil-admirari 2022-05-17 15:28 ` Soft Works 2022-05-17 15:43 ` Soft Works 2022-05-20 17:51 ` nil-admirari 2022-05-20 18:03 ` Soft Works 2022-05-21 11:08 ` nil-admirari 2022-05-21 11:12 ` Soft Works 2022-05-23 15:35 ` nil-admirari 2022-05-23 15:47 ` Soft Works 2022-05-23 17:12 ` Hendrik Leppkes 2022-05-24 5:32 ` Soft Works 2022-05-24 5:54 ` Soft Works 2022-05-24 9:47 ` Soft Works 2022-05-24 12:11 ` nil-admirari 2022-05-15 22:17 ` [FFmpeg-devel] [PATCH v2 2/2] avformat/os_support: " softworkz 2022-05-16 21:23 ` [FFmpeg-devel] [PATCH v3 0/2] " ffmpegagent 2022-05-16 21:23 ` [FFmpeg-devel] [PATCH v3 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-16 21:23 ` [FFmpeg-devel] [PATCH v3 2/2] avformat/os_support: " softworkz 2022-05-23 11:29 ` [FFmpeg-devel] [PATCH v4 0/2] " ffmpegagent 2022-05-23 11:29 ` [FFmpeg-devel] [PATCH v4 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-23 11:29 ` [FFmpeg-devel] [PATCH v4 2/2] avformat/os_support: " softworkz 2022-05-24 8:43 ` [FFmpeg-devel] [PATCH v5 0/2] " ffmpegagent 2022-05-24 8:43 ` [FFmpeg-devel] [PATCH v5 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-24 9:09 ` Martin Storsjö 2022-05-24 8:43 ` [FFmpeg-devel] [PATCH v5 2/2] avformat/os_support: " softworkz 2022-05-24 9:23 ` Martin Storsjö 2022-05-24 9:33 ` Soft Works 2022-05-24 10:25 ` Martin Storsjö 2022-05-24 11:15 ` Soft Works 2022-05-24 11:26 ` Martin Storsjö 2022-05-24 12:31 ` Soft Works 2022-05-24 12:44 ` Martin Storsjö 2022-05-24 13:41 ` Soft Works 2022-05-24 13:58 ` [FFmpeg-devel] [PATCH v6 0/2] " ffmpegagent 2022-05-24 13:58 ` [FFmpeg-devel] [PATCH v6 1/2] avutil/wchar_filename, file_open: " softworkz 2022-05-24 20:55 ` Martin Storsjö 2022-05-24 13:58 ` [FFmpeg-devel] [PATCH v6 2/2] avformat/os_support: " softworkz 2022-05-24 20:58 ` Martin Storsjö 2022-05-24 22:12 ` Soft Works 2022-05-25 7:09 ` Martin Storsjö 2022-05-24 22:20 ` [FFmpeg-devel] [PATCH v7 0/3] " ffmpegagent 2022-05-24 22:20 ` [FFmpeg-devel] [PATCH v7 1/3] avutil/wchar_filename, file_open: " softworkz 2022-05-24 22:20 ` [FFmpeg-devel] [PATCH v7 2/3] avformat/os_support: " softworkz 2022-05-25 14:47 ` nil-admirari 2022-05-25 15:28 ` Soft Works 2022-05-25 19:17 ` nil-admirari 2022-05-26 5:09 ` Soft Works 2022-05-25 18:50 ` Martin Storsjö 2022-05-24 22:20 ` [FFmpeg-devel] [PATCH v7 3/3] avformat/file: remove _WIN32 condition softworkz 2022-05-25 7:34 ` [FFmpeg-devel] [PATCH v7 0/3] Support long file names on Windows Martin Storsjö 2022-05-26 9:28 ` [FFmpeg-devel] [PATCH v8 " ffmpegagent 2022-05-26 9:28 ` [FFmpeg-devel] [PATCH v8 1/3] avutil/wchar_filename, file_open: " softworkz 2022-05-26 9:28 ` [FFmpeg-devel] [PATCH v8 2/3] avformat/os_support: " softworkz 2022-05-26 9:28 ` [FFmpeg-devel] [PATCH v8 3/3] avformat/file: remove _WIN32 condition softworkz 2022-05-26 21:26 ` [FFmpeg-devel] [PATCH v8 0/3] Support long file names on Windows Martin Storsjö 2022-06-09 10:03 ` Martin Storsjö 2022-06-09 19:37 ` nil-admirari 2022-06-09 20:15 ` Soft Works 2022-06-09 20:22 ` nil-admirari 2022-06-09 21:32 ` Soft Works 2022-06-09 20:21 ` Martin Storsjö 2022-06-09 20:57 ` nil-admirari 2022-06-09 21:02 ` Martin Storsjö 2022-06-13 16:42 ` nil-admirari 2022-06-09 21:03 ` Soft Works
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=DM8P223MB0365AA0CC6D96BA33EEEBE03BACF9@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM \ --to=softworkz@hotmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git