mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-21 00:07:36 +08:00
* 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.
This commit is contained in:
parent
39ce0b45e9
commit
455acb11a4
@ -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.
|
||||
|
@ -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 ())
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user