From 03a99a7ecec0bae1fb49b06dfb0456e535332e63 Mon Sep 17 00:00:00 2001 From: "cantab.net!aia21" Date: Tue, 27 Apr 2004 12:48:14 +0000 Subject: [PATCH] Work around mbstowcs() bug in DJGPP and update workaround for bug in mbsrtowcs() on Cygwin. (Lode, Christophe, Anton) (Logical change 1.384) --- libntfs/unistr.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/libntfs/unistr.c b/libntfs/unistr.c index fcfcc4f8..cfb78f24 100644 --- a/libntfs/unistr.c +++ b/libntfs/unistr.c @@ -451,16 +451,20 @@ int ntfs_mbstoucs(const char *ins, uchar_t **outs, int outs_len) } /* Determine the length of the multi-byte string. */ s = ins; -#ifdef HAVE_MBSINIT +#if defined(HAVE_MBSINIT) memset(&mbstate, 0, sizeof(mbstate)); ins_len = mbsrtowcs(NULL, (const char **)&s, 0, &mbstate); -#else - ins_len = mbstowcs(NULL, s, 0); -#endif #ifdef __CYGWIN32__ - /* Eeek!!! Cygwin has broken mbstowcs() implementation!!! */ - if (!ins_len) + if (!ins_len && *ins) { + /* Older Cygwin had broken mbsrtowcs() implementation. */ ins_len = strlen(ins); + } +#endif +#elif !defined(DJGPP) + ins_len = mbstowcs(NULL, s, 0); +#else + /* Eeek!!! DJGPP has broken mbstowcs() implementation!!! */ + ins_len = strlen(ins); #endif if (ins_len == -1) return ins_len; @@ -550,4 +554,3 @@ err_out: } return -1; } -