Mail Archives: cygwin/2009/05/08/16:03:04
2009/5/9 Corinna Vinschen <corinna-cygwin AT cygwin DOT 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) =3D=3D 0xf000)
pw &=3D 0xff;
+ int eno =3D errno;
int bytes =3D f_wctomb (_REENT, buf, pw, charset, &ps);
+ errno =3D eno;
/* Convert chars invalid in the current codepage to a sequence
ASCII SO; UTF-8 representation of invalid char. */
if (bytes =3D=3D -1 && *charset !=3D 'U'/*TF-8*/)
> Nevertheless, it looks like python has a problem as well. =A0Why does it
> check an errno if the functions returned successfully? =A0That doesn't
> sound right to me.
When the last readdir returns NULL, python detects the error because
readdir keeps previous errno.
1) ep =3D readdir(dirp); // ep->d_name =3D=3D ".", errno =3D=3D 0
Python check only ep !=3D NULL. -> OK
2) ep =3D readdir(dirp); // ep->d_name =3D=3D "..", errno =3D=3D 0
Python check only ep !=3D NULL. -> OK
3) ep =3D readdir(dirp); // ep->d_name =3D=3D "\xe3\x82...", errno =3D=3D 1=
38
Python check only ep !=3D NULL. -> OK
4) ep =3D readdir(dirp); // ep->d_name =3D=3D "\xe3\x83...", errno =3D=3D 1=
38
Python check only ep !=3D NULL. -> OK
5) ep =3D readdir(dirp); // ep =3D=3D NULL, errno =3D=3D 138
Python check ep =3D=3D NULL and errno !=3D 0. -> Fail!
--=20
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/
- Raw text -