This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]