Hi Bram, 2014/10/15 Wed 19:57:03 UTC+9 Bram Moolenaar wrote: > Ken Takata wrote: > > > open() and fopen() are implemented with CreateFileA(), and CreateFileA() can > > handle maximum MAX_PATH characters (*1). > > However, some other CRT functions are limited to MAX_PATH bytes (e.g. > > stat()). > > This inconsistency causes the problem. > > > > (*1) http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx > > "In the ANSI version of this function, the name is limited to MAX_PATH > > characters." > > > > To avoid this problem, maximum length should be limited to MAX_PATH bytes. > > (If someone want to handle a file name which is longer than MAX_PATH bytes > > and > > shorter than MAX_PATH characters, he should set 'enc' to utf-8.) > > > > I wrote a patch to fix this problem. > > Please check the attached patch. > > Can't we fix the places that are restricted to MAX_PATH bytes? If this > is 256 bytes that's quite short. Perhaps we can change a few places to > use MAX_PATH * 2, since this appears to be a problem with double-byte > encodings only. > > We could check somewhere that MAX_PATH is 256, and then define another > variable to 512. Perhaps MAX_PATH_BYTES.
At first, MAX_PATH (or _MAX_PATH) is 260, not 256. I think there are two problems, if 'enc' is not utf-8: 1. Vim cannot handle a very long filename which is longer than MAX_PATH bytes and shorter than MAX_PATH characters properly. 2. Vim breaks an existing file if the filename is longer than MAX_PATH bytes and shorter than MAX_PATH characters. This is a special case of 1 and a critical problem. My patch only fixes the problem 2. I don't think the problem 1 needs to be fixed, because using enc=utf-8 doesn't have the problem 1. When 'enc' is utf-8, Vim can handle a very long filename properly. Using MAX_PATH * 2 bytes doesn't solve the problem 1, because stat(), FindFirstFileA() or some other API/CRT functions cannot handle longer than MAX_PATH bytes. E.g. FindFirstFileA() uses WIN32_FIND_DATAA structure (*1) and its cFileName member is only MAX_PATH bytes. (*1) http://msdn.microsoft.com/en-us/library/windows/desktop/aa365740.aspx If we want to use a very long filename even if 'enc' is not utf-8, we should always use wide APIs on WinNT and later. We need to modify many part and it has very high risk, I think. Regards, Ken Takata -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.