Commit 62fe8f4c authored by Damien Fouilleul's avatar Damien Fouilleul

- unicode.c: possible fix for UTF8 filename support under WinMe/98/95, needs testing though

parent b4fa3ce6
......@@ -331,11 +331,28 @@ FILE *utf8_fopen( const char *filename, const char *mode )
}
wpath[MAX_PATH] = L'\0';
/*
* fopen() cannot open files with non-“ANSI” characters on Windows.
* We use _wfopen() instead. Same thing for mkdir() and stat().
*/
return _wfopen( wpath, wmode );
/* retrieve OS version */
if( GetVersion() < 0x80000000 )
{
/* for Windows NT and above */
/*
* fopen() cannot open files with non-“ANSI” characters on Windows.
* We use _wfopen() instead. Same thing for mkdir() and stat().
*/
return _wfopen( wpath, wmode );
}
else
{
/* for Windows Me/98/95 */
/* we use GetShortFileNameW to get the DOS 8.3 version of the file we need to open */
char spath[MAX_PATH + 1];
if( GetShortPathNameW( wpath, spath, MAX_PATH ) )
{
return fopen( spath, wmode );
}
errno = ENOENT;
return NULL;
}
#endif
}
......@@ -517,7 +534,24 @@ static int utf8_statEx( const char *filename, void *buf,
}
wpath[MAX_PATH] = L'\0';
return _wstati64( wpath, (struct _stati64 *)buf );
/* retrieve Windows OS version */
if( GetVersion() < 0x80000000 )
{
/* for Windows NT and above */
return _wstati64( wpath, (struct _stati64 *)buf );
}
else
{
/* for Windows Me/98/95 */
/* we use GetShortFileNameW to get the DOS 8.3 version */
char spath[MAX_PATH + 1];
if( GetShortPathNameW( wpath, spath, MAX_PATH ) )
{
return _stati64( spath, (struct _stati64 *)buf );
}
errno = ENOENT;
return -1;
}
#endif
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment