}
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
}
}
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
}