public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* 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
@ 2011-11-03 20:49 Leon Vanderploeg
  2011-11-03 21:56 ` Charles Wilson
  0 siblings, 1 reply; 6+ messages in thread
From: Leon Vanderploeg @ 2011-11-03 20:49 UTC (permalink / raw)
  To: cygwin

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-11-10 10:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-03 20:49 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 Leon Vanderploeg
2011-11-03 21:56 ` Charles Wilson
2011-11-04  8:47   ` Corinna Vinschen
2011-11-10  5:19     ` Leon Vanderploeg
2011-11-10  9:59       ` Corinna Vinschen
2011-11-10 10:09         ` Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).