stat() lstat() not able to read long filename with cyrillic chars?
Andrey Repin
anrdaemon@yandex.ru
Fri Dec 25 00:05:00 GMT 2015
Greetings, Corinna Vinschen!
>> First, I have read the FAQ and this mailing archive :)
>>
>> Here is the problem I meet:
>>
>> In a directory are placed three files using windows 8's explorer:
>> - a short Cyrillic filename "абваб.txt"
>> - a long Cyrillic filename
>> "абвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабвабваб.txt"
>> - a long Latin filename
>> "ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa.txt"
>>
>>
>> >From a C program compiled under Cygwin, I can obtain the corresponding
>> filename strings using readdir_r()...
>>
>> "\320\260\320\261\320\262\320\260\320\261.txt"
>> "\320\260\320\261\320\262\320\260\320\261\320\262\320\260\320\261 [snipped]"
>> "abababababaababababa [snipped]"
>>
>> ... but passing these strings in turn to lstat() or stat() returns 0 as
>> expected for all except for the long Cyrillic filename.
> NAME_MAX is 255. On Windows this is the number of UTF-16 chars
> unfortunately. On POSIX systems (as on Cygwin) this is the number of
> bytes. Long UTF-16 strings in cyrillic take twice as much UTF-8 chars
> as it has UTF-16 chars, so NAME_MAX in utf-8 cyrillics translates into
> a maximum of 127 UTF-16 chars.
Aren't POSIX restrictions are a bit different?
Namely 128 bytes per path element and 4096 bytes for file name?
> If you need access to UTF-16 filenames with more characters, you can
> switch to a one-byte charset temporarily, e.g.
> $ LC_ALL=ru_RU your_app
> to switch to iso-8859-5 or
> $ LC_ALL=ru_RU.CP1251
> to switch to Windows codepage 1251. See
> https://cygwin.com/cygwin-ug-net/setup-locale.html
> HTH,
> Corinna
--
With best regards,
Andrey Repin
Friday, December 25, 2015 03:03:51
Sorry for my terrible english...
More information about the Cygwin
mailing list