]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/file.cpp
* Fixed two memory leaks.
[wxWidgets.git] / src / common / file.cpp
index 1cdd2bd0fcaa1ce5eb92673dea9a9e7efad91783..44c4b7b77fedde9dca0ff1246a98c3803b70ded3 100644 (file)
@@ -53,6 +53,9 @@
   #include  <windows.h>     // for GetTempFileName
 #elif (defined(__UNIX__) || defined(__GNUWIN32__))
   #include  <unistd.h>
+#elif (defined(__WXSTUBS__))
+  // Have to ifdef this for different environments
+  #include <io.h>
 #else
   #error  "Please specify the header with file functions declarations."
 #endif  //Win/UNIX
 
   #define   S_IFDIR     _S_IFDIR
   #define   S_IFREG     _S_IFREG
+
+  #define   W_OK        2
+  #define   R_OK        4
 #else
   #define   tell(fd)    lseek(fd, 0, SEEK_CUR)
 #endif  //_MSC_VER
 
+#ifdef __BORLANDC__
+  #define   W_OK        2
+  #define   R_OK        4
+#endif
+
 // there is no distinction between text and binary files under Unix
 #ifdef    __UNIX__
   #define   O_BINARY    (0)
 // ----------------------------------------------------------------------------
 // static functions
 // ----------------------------------------------------------------------------
-bool wxFile::Exists(const char *sz)
+bool wxFile::Exists(const char *name)
 {
   struct stat st;
-  return !access(sz, 0) && !stat(sz, &st) && (st.st_mode & S_IFREG);
+  return !access(name, 0) && !stat(name, &st) && (st.st_mode & S_IFREG);
+}
+
+bool wxFile::Access(const char *name, OpenMode mode)
+{
+  int how;
+
+  switch ( mode ) {
+    case read:
+      how = R_OK;
+      break;
+
+    case write:
+      how = W_OK;
+      break;
+
+    default:
+      wxFAIL_MSG("bad wxFile::Access mode parameter.");
+  }
+
+  return access(name, how) == 0;
 }
 
 // ----------------------------------------------------------------------------
@@ -221,11 +252,11 @@ off_t wxFile::Read(void *pBuf, off_t nCount)
     return wxInvalidOffset;
   }
   else
-    return (uint)iRc;
+    return (size_t)iRc;
 }
 
 // write
-uint wxFile::Write(const void *pBuf, uint nCount)
+size_t wxFile::Write(const void *pBuf, size_t nCount)
 {
   wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
 
@@ -395,7 +426,7 @@ bool wxTempFile::Open(const wxString& strName)
   // otherwise rename() in Commit() might not work (if the files are on
   // different partitions for example). Unfortunately, the only standard
   // (POSIX) temp file creation function tmpnam() can't do it.
-  #ifdef  __UNIX__
+  #if defined(__UNIX__) || defined(__WXSTUBS__)
     static const char *szMktempSuffix = "XXXXXX";
     m_strTemp << strName << szMktempSuffix;
     mktemp((char *)m_strTemp.c_str()); // will do because length doesn't change