This is the mail archive of the
cygwin
mailing list for the Cygwin project.
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
- From: "Leon Vanderploeg" <leonv at vaultnow dot com>
- To: <cygwin at cygwin dot com>
- Date: Thu, 3 Nov 2011 14:48:37 -0600
- Subject: 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
Greetings,
This issue is making my head flat from pounding it against the wall. It appears to be a bug in Cygwin 1.7, but I can't say with any certainty. I've been down too many dead end trails already...
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:
$ ./winfilestat3.exe
hFind filename is ***Maâana.docx***
hFind file name stat return code is: -1
character 0 is M
character 0 is signed int 77, hex 4d
character 1 is a
character 1 is signed int 97, hex 61
character 2 is â
character 2 is signed int -15, hex fffffff1
character 3 is a
character 3 is signed int 97, hex 61
character 4 is n
character 4 is signed int 110, hex 6e
character 5 is a
character 5 is signed int 97, hex 61
character 6 is .
character 6 is signed int 46, hex 2e
character 7 is d
character 7 is signed int 100, hex 64
character 8 is o
character 8 is signed int 111, hex 6f
character 9 is c
character 9 is signed int 99, hex 63
NOTE that the à is interpreted as â, and the stat fails.
I moved the compiled program to an old Server 2003 running Cygwin 1.5.25. It CORRECTLY returns:
bash-3.2$ ./winfilestat3.exe
hFind filename is ***MaÃana.docx***
hFind file name stat return code is: 0
character 0 is M
character 0 is signed int 77, hex 4d
character 1 is a
character 1 is signed int 97, hex 61
character 2 is Ã
character 2 is signed int -15, hex fffffff1
character 3 is a
character 3 is signed int 97, hex 61
character 4 is n
character 4 is signed int 110, hex 6e
character 5 is a
character 5 is signed int 97, hex 61
character 6 is .
character 6 is signed int 46, hex 2e
bash-3.2$
bash-3.2$
Note the à is correct, and the stat succeeds.
Is this a bug, or do I need to set something up special on Cygwin 1.7 to get it to work the way it used to?
Thanks in advance,
Leon
**start of code**************************** #include <string.h> #include <unistd.h> #include <stdio.h> #include <sys/stat.h> #include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <winbase.h>
#include <sys/types.h>
#include <fcntl.h>
#include <dirent.h>
#include <curl/curl.h>
#include <pthread.h>
#include <wctype.h>
#include <sys/wait.h>
#include <cygwin/wait.h>
struct stat fileStat;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
int main(int argc, char **argv)
{
char filename[100];
int rtn, i;
char chr;
//find file
char pathSearch[300];
sprintf(pathSearch, "C:\\Testing\\*.docx");
hFind = FindFirstFile(pathSearch, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf("Warning: No .docx file found in the directory. Exiting.\n");
return(1);
}
strcpy(filename, FindFileData.cFileName);
printf("hFind filename is ***%s***\n",filename);
rtn = stat(filename,&fileStat);
printf("hFind file name stat return code is: %d\n", rtn);
for ( i = 0 ; i < wcslen(filename) ; i++ )
{
printf("character %d is %c\n", i, filename[i] );
printf("character %d is signed int %d, hex %x \n", i, filename[i], filename[i] );
}
return(0);
}
**end of code****************************
Leon Vanderploeg
Cell 303-877-9654
--
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