2009/5/9 Corinna Vinschen <corinna-cyg...@cygwin.com>: > Cool. Thanks for the patch. This actually solves the problem. > I applied the patch with just a little tweak.
Thanks. The following patch might be better. --- a/winsup/cygwin/strfuncs.cc Thu May 07 12:29:17 2009 +0900 +++ b/winsup/cygwin/strfuncs.cc Sat May 09 04:39:49 2009 +0900 @@ -427,7 +427,9 @@ path names) is transform_chars in path.cc. */ if ((pw & 0xff00) == 0xf000) pw &= 0xff; + int eno = errno; int bytes = f_wctomb (_REENT, buf, pw, charset, &ps); + errno = eno; /* Convert chars invalid in the current codepage to a sequence ASCII SO; UTF-8 representation of invalid char. */ if (bytes == -1 && *charset != 'U'/*TF-8*/) > Nevertheless, it looks like python has a problem as well. Why does it > check an errno if the functions returned successfully? That doesn't > sound right to me. When the last readdir returns NULL, python detects the error because readdir keeps previous errno. 1) ep = readdir(dirp); // ep->d_name == ".", errno == 0 Python check only ep != NULL. -> OK 2) ep = readdir(dirp); // ep->d_name == "..", errno == 0 Python check only ep != NULL. -> OK 3) ep = readdir(dirp); // ep->d_name == "\xe3\x82...", errno == 138 Python check only ep != NULL. -> OK 4) ep = readdir(dirp); // ep->d_name == "\xe3\x83...", errno == 138 Python check only ep != NULL. -> OK 5) ep = readdir(dirp); // ep == NULL, errno == 138 Python check ep == NULL and errno != 0. -> Fail! -- IWAMURO Motnori <http://vmi.jp/> -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/