]> git.saurik.com Git - wxWidgets.git/commitdiff
added "access" parameter to wxFile::Create and Open. The default value is
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 24 Jul 1998 17:03:26 +0000 (17:03 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 24 Jul 1998 17:03:26 +0000 (17:03 +0000)
"rw-r--r--" mode.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/file.h
src/common/file.cpp

index 125ddaff875c93307e1572843e23adf4252a5d6e..40d4d8f21b48ad8d782dacd77e6abfaf9ee782eb 100644 (file)
@@ -7,7 +7,7 @@
 // Created:     29/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef   __FILEH__
 // error return value for Seek() functions
 const off_t ofsInvalid = (off_t)-1;
 
+// we redefine these constants here because S_IREAD &c are _not_ standard
+// however, we do assume that the values correspond to the Unix umask bits
+#define wxS_IRUSR 00400
+#define wxS_IWUSR 00200
+#define wxS_IXUSR 00100
+
+#define wxS_IRGRP 00040
+#define wxS_IWGRP 00020
+#define wxS_IXGRP 00010
+
+#define wxS_IROTH 00004
+#define wxS_IWOTH 00002
+#define wxS_IXOTH 00001
+
+// default mode for the new files: corresponds to umask 022
+#define wxS_DEFAULT   (wxS_IRUSR | wxS_IWUSR | wxS_IRGRP | wxS_IROTH)
+
 // ----------------------------------------------------------------------------
 // class wxFile: raw file IO
 //
@@ -38,7 +55,7 @@ class WXDLLEXPORT wxFile
 public:
   // more file constants
   // -------------------
-    
+
     // opening mode
   enum OpenMode { read, write, read_write, write_append };
     // standard values for file descriptor
@@ -58,8 +75,12 @@ public:
   wxFile(int fd) { m_fd = fd; }
 
   // open/close
-  bool Create(const char *szFileName, bool bOverwrite = FALSE);
-  bool Open(const char *szFileName, OpenMode mode = read);
+    // create a new file (with the default value of bOverwrite, it will fail if
+    // the file already exists, otherwise it will overwrite it and succeed)
+  bool Create(const char *szFileName, bool bOverwrite = FALSE,
+              int access = wxS_DEFAULT);
+  bool Open(const char *szFileName, OpenMode mode = read,
+            int access = wxS_DEFAULT);
   bool Close();  // Close is a NOP if not opened
 
   // assign an existing file descriptor and get it back from wxFile object
@@ -94,7 +115,7 @@ public:
   bool Eof() const;
     // is an error occured?
   bool Error() const { return m_error; }
-    
+
   // dtor closes the file if opened
  ~wxFile();
 
@@ -116,7 +137,7 @@ private:
 // file (and close this one) or call Discard() to cancel the modification. If
 // you call neither of them, dtor will call Discard().
 // ----------------------------------------------------------------------------
-class wxTempFile
+class WXDLLEXPORT wxTempFile
 {
 public:
   // ctors
index f2f047c3453a3c2428dcc42368908e77eddc4aca..4372a8092b92ce44d9495268e97463e133e42361 100644 (file)
@@ -7,7 +7,7 @@
 // Created:     29/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 // ----------------------------------------------------------------------------
@@ -27,7 +27,7 @@
 #endif
 
 // standard
-#if    defined(__WXMSW__) && !defined(__GNUWIN32__)
+#if   defined(__WXMSW__) && !defined(__GNUWIN32__)
   #include  <io.h>
 
   #define   WIN32_LEAN_AND_MEAN
@@ -54,7 +54,7 @@
 #elif (defined(__UNIX__) || defined(__GNUWIN32__))
   #include  <unistd.h>
 #else
-       #error  "Please specify the header with file functions declarations."
+  #error  "Please specify the header with file functions declarations."
 #endif  //Win/UNIX
 
 #include  <stdio.h>       // SEEK_xxx constants
 
   #define   S_IFDIR     _S_IFDIR
   #define   S_IFREG     _S_IFREG
-
-  #define   S_IREAD     _S_IREAD
-  #define   S_IWRITE    _S_IWRITE
 #else
   #define   tell(fd)    lseek(fd, 0, SEEK_CUR)
 #endif  //_MSC_VER
 
 // there is no distinction between text and binary files under Unix
-#ifdef         __UNIX__
-       #define         O_BINARY                (0)
-#endif //__UNIX__
+#ifdef    __UNIX__
+  #define   O_BINARY    (0)
+#endif  //__UNIX__
 
 // wxWindows
 #include  <wx/string.h>
 // static functions
 // ----------------------------------------------------------------------------
 bool wxFile::Exists(const char *sz)
-{ 
-  struct stat st; 
+{
+  struct stat st;
   return !access(sz, 0) && !stat(sz, &st) && (st.st_mode & S_IFREG);
 }
 
@@ -139,11 +136,11 @@ wxFile::~wxFile()
 }
 
 // create the file, fail if it already exists and bOverwrite
-bool wxFile::Create(const char *szFileName, bool bOverwrite)
+bool wxFile::Create(const char *szFileName, bool bOverwrite, int access)
 {
   // if bOverwrite we create a new file or truncate the existing one,
   // otherwise we only create the new file and fail if it already exists
-  int fd = open(szFileName, O_CREAT | (bOverwrite ? O_TRUNC : O_EXCL));
+  int fd = open(szFileName, O_CREAT | (bOverwrite ? O_TRUNC : O_EXCL), access);
 
   if ( fd == -1 ) {
     wxLogSysError(_("can't create file '%s'"), szFileName);
@@ -156,29 +153,29 @@ bool wxFile::Create(const char *szFileName, bool bOverwrite)
 }
 
 // open the file
-bool wxFile::Open(const char *szFileName, OpenMode mode)
+bool wxFile::Open(const char *szFileName, OpenMode mode, int access)
 {
   int flags = O_BINARY;
 
   switch ( mode ) {
-    case read:      
-      flags |= O_RDONLY; 
+    case read:
+      flags |= O_RDONLY;
       break;
 
-    case write:     
-      flags |= O_WRONLY | O_CREAT | O_TRUNC; 
+    case write:
+      flags |= O_WRONLY | O_CREAT | O_TRUNC;
       break;
 
     case write_append:
       flags |= O_WRONLY | O_APPEND;
       break;
 
-    case read_write: 
+    case read_write:
       flags |= O_RDWR;
       break;
   }
 
-  int fd = open(szFileName, flags, S_IREAD | S_IWRITE);
+  int fd = open(szFileName, flags, access);
 
   if ( fd == -1 ) {
     wxLogSysError(_("can't open file '%s'"), szFileName);
@@ -314,7 +311,7 @@ off_t wxFile::Length() const
   #else
     int iRc = tell(m_fd);
     if ( iRc != -1 ) {
-                       // @ have to use const_cast :-(
+      // @ have to use const_cast :-(
       int iLen = ((wxFile *)this)->SeekEnd();
       if ( iLen != -1 ) {
         // restore old position
@@ -390,7 +387,7 @@ wxTempFile::wxTempFile(const wxString& strName)
 bool wxTempFile::Open(const wxString& strName)
 {
   m_strName = strName;
-  
+
   // we want to create the file in the same directory as strName because
   // otherwise rename() in Commit() might not work (if the files are on
   // different partitions for example). Unfortunately, the only standard
@@ -408,7 +405,7 @@ bool wxTempFile::Open(const wxString& strName)
       wxLogLastError("GetTempFileName");
     m_strTemp.UngetWriteBuf();
   #endif  // Windows/Unix
-    
+
   return m_file.Open(m_strTemp, wxFile::write);
 }