diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2008-05-14 10:21:22 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2008-05-14 10:21:22 +0000 |
commit | 455acb11a4e06f393a6258e735c372be0ce08ea1 (patch) | |
tree | f5ae43d28fbb9a004c46351d712fd55e52089e07 | |
parent | 39ce0b45e94ae9db46608b4fe4eaf83b1c6b9a0f (diff) | |
download | cygnal-455acb11a4e06f393a6258e735c372be0ce08ea1.tar.gz cygnal-455acb11a4e06f393a6258e735c372be0ce08ea1.tar.bz2 cygnal-455acb11a4e06f393a6258e735c372be0ce08ea1.zip |
* fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Drop
explicit transformation of special DOS chars.
* strfuncs.cc (sys_wcstombs): Always transform UNICODE private use area
back to ASCII.
-rw-r--r-- | winsup/cygwin/ChangeLog | 7 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_disk_file.cc | 4 | ||||
-rw-r--r-- | winsup/cygwin/strfuncs.cc | 14 |
3 files changed, 20 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index ae5a7fb1a..44b94cbc1 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2008-05-14 Corinna Vinschen <corinna@vinschen.de> + + * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Drop + explicit transformation of special DOS chars. + * strfuncs.cc (sys_wcstombs): Always transform UNICODE private use area + back to ASCII. + 2008-05-13 Corinna Vinschen <corinna@vinschen.de> * include/cygwin/stdlib.h (initstate): Declare. diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 7d57dcfde..bca5448fa 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -1645,10 +1645,6 @@ fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err, } } - /* Transform special DOS chars back to normal. */ - for (USHORT i = 0; i < fname->Length / sizeof (WCHAR); ++i) - if ((fname->Buffer[i] & 0xff00) == 0xf000) - fname->Buffer[i] &= 0xff; #if 0 if (pc.isencoded ()) { diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc index 5b05cc962..8c0bbb241 100644 --- a/winsup/cygwin/strfuncs.cc +++ b/winsup/cygwin/strfuncs.cc @@ -11,6 +11,7 @@ details. */ #include "winsup.h" #include <stdlib.h> +#include <wchar.h> #include <winnls.h> #include <ntdll.h> #include "cygerrno.h" @@ -39,7 +40,18 @@ sys_wcstombs (char *tgt, int tlen, const PWCHAR src, int slen) { int ret; - ret = WideCharToMultiByte (get_cp (), 0, src, slen, tgt, tlen, NULL, NULL); + /* Convert UNICODE private use area. Reverse functionality (only for + path names) is transform_chars in path.cc. */ + if (slen < 0) + slen = wcslen (src) + 1; + WCHAR sbuf[slen]; + memcpy (sbuf, src, slen * sizeof (WCHAR)); + const unsigned char *end = (unsigned char *) (sbuf + slen); + for (unsigned char *s = ((unsigned char *) sbuf) + 1; s < end; + s += sizeof (WCHAR)) + if (*s == 0xf0) + *s = 0; + ret = WideCharToMultiByte (get_cp (), 0, sbuf, slen, tgt, tlen, NULL, NULL); if (ret && tgt) { ret = (ret < tlen) ? ret : tlen - 1; |