ecere: Fixes to support MinGW-w64
[sdk] / ecere / src / sys / File.ec
index 8f03462..58fef0f 100644 (file)
@@ -40,7 +40,9 @@ default:
 
 #if defined(__WIN32__)
 #define WIN32_LEAN_AND_MEAN
+#define String String_
 #include <windows.h>
+#undef String
 #include <io.h>
 
 BOOL WINAPI GetVolumePathName(LPCTSTR lpszFileName,LPTSTR lpszVolumePathName,DWORD cchBufferLength);
@@ -572,7 +574,8 @@ public:
          char text[MAX_F_STRING];
          va_list args;
          va_start(args, format);
-         vsprintf(text, format, args);
+         vsnprintf(text, sizeof(text), format, args);
+         text[sizeof(text)-1] = 0;
          if(Puts(text))
             result = strlen(text);
          va_end(args);
@@ -1384,13 +1387,14 @@ static FileDesc FileFind(char * path, char * extensions)
                }
                strcpy(file.name,de->d_name);
                strcat(file.path, file.name);
-               stat(file.path, &s);
-               file.stats.attribs = (s.st_mode&S_IFDIR) ? FileAttribs { isDirectory = true } : FileAttribs { isFile = true };
-               file.stats.size = s.st_size;
-               file.stats.accessed = s.st_atime;
-               file.stats.modified = s.st_mtime;
-               file.stats.created = s.st_ctime;
-          
+               if(!stat(file.path, &s))
+               {
+                  file.stats.attribs = (s.st_mode&S_IFDIR) ? FileAttribs { isDirectory = true } : FileAttribs { isFile = true };
+                  file.stats.size = s.st_size;
+                  file.stats.accessed = s.st_atime;
+                  file.stats.modified = s.st_mtime;
+                  file.stats.created = s.st_ctime;
+               }
                strcpy(d.name, path);
 
                result = file;
@@ -1658,13 +1662,15 @@ private class FileDesc : struct
                if(d.name[0] && d.name[1])
                   strcat(path, DIR_SEPS);
                strcat(path, name);
-               stat(path, &s);
-               stats.attribs = FileAttribs { };
-               stats.attribs = (s.st_mode&S_IFDIR) ? FileAttribs { isDirectory = true } : FileAttribs { isFile = true };
-               stats.size = s.st_size;
-               stats.accessed = s.st_atime;
-               stats.modified = s.st_mtime;
-               stats.created = s.st_ctime;
+               if(!stat(path, &s))
+               {
+                  stats.attribs = FileAttribs { };
+                  stats.attribs = (s.st_mode&S_IFDIR) ? FileAttribs { isDirectory = true } : FileAttribs { isFile = true };
+                  stats.size = s.st_size;
+                  stats.accessed = s.st_atime;
+                  stats.modified = s.st_mtime;
+                  stats.created = s.st_ctime;
+               }
                result = this;
             }
             else