delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/11/03/17:56:37

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_LOW
X-Spam-Check-By: sourceware.org
Message-ID: <4EB30DF9.2080006@cwilson.fastmail.fm>
Date: Thu, 03 Nov 2011 17:56:09 -0400
From: Charles Wilson <cygwin AT cwilson DOT fastmail DOT fm>
Reply-To: Charles Wilson <cygwin AT cwilson DOT fastmail DOT fm>
User-Agent: Mozilla/5.0 (Windows NT 5.2; WOW64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: Possible Bug (clarification) in Cygwin 1.7.5 -- findfirstfile (and findnextfile) yeild bad cfilename when file names have special characters. Works in cygwin 1.5, fails in 1.7
References: <135801cc9a69$f73ceaf0$e5b6c0d0$@vaultnow.com>
In-Reply-To: <135801cc9a69$f73ceaf0$e5b6c0d0$@vaultnow.com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On 11/3/2011 4:48 PM, Leon Vanderploeg wrote:
> With cygwin 1.7.5, cFileName with a special characters such as ñ (n
> with tidle above it) fail be properly extracted from a
> WIN32_FIND_DATA structure with findFirstFile (or findNextFile).
> 
> To set up a simple test scenario, I created a file in C:\Testing
> named  Mañana.docx.  I compiled the code at the end of this message
> on Cygwin 1.7.9 with GCC version 3.4.4 on Server 2008 32 bit system.
> On this system (and on a Windows 7 32 bit machine), it returns:

a) Why are you using native Win32 APIs in a cygwin program? You should
be using the POSIX interfaces instead -- see /usr/include/dirent.h.

DIR *opendir (const char *);
DIR *fdopendir (int);
struct dirent *readdir (DIR *);
int readdir_r (DIR *, struct dirent *, struct dirent **);
void rewinddir (DIR *);
int closedir (DIR *);

b) What you observe is an artifact of cygwin-1.7's new *support* for
i18n.  In cygwin-1.5, it just didn't care and passed all the bytes back
exactly as found without transliteration.  In 1.7, it (correctly)
transcodes strings into the current locale -- and your current locale
does not appear to support ñ -- or, at least, you haven't told cygwin to
use the correct one.

(I'm probably thoroughly botching this explanation, but the point is,
you need to check your LC_* and LANG env vars, and maybe call
setlocale(LC_ALL, "") in your application.)

--
Chuck

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019