added "access" parameter to wxFile::Create and Open. The default value is
"rw-r--r--" mode. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
// Created: 29/01/98
|
// Created: 29/01/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||||
// Licence: wxWindows license
|
// Licence: wxWindows license
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __FILEH__
|
#ifndef __FILEH__
|
||||||
@@ -27,6 +27,23 @@
|
|||||||
// error return value for Seek() functions
|
// error return value for Seek() functions
|
||||||
const off_t ofsInvalid = (off_t)-1;
|
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
|
// class wxFile: raw file IO
|
||||||
//
|
//
|
||||||
@@ -38,7 +55,7 @@ class WXDLLEXPORT wxFile
|
|||||||
public:
|
public:
|
||||||
// more file constants
|
// more file constants
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
// opening mode
|
// opening mode
|
||||||
enum OpenMode { read, write, read_write, write_append };
|
enum OpenMode { read, write, read_write, write_append };
|
||||||
// standard values for file descriptor
|
// standard values for file descriptor
|
||||||
@@ -58,8 +75,12 @@ public:
|
|||||||
wxFile(int fd) { m_fd = fd; }
|
wxFile(int fd) { m_fd = fd; }
|
||||||
|
|
||||||
// open/close
|
// open/close
|
||||||
bool Create(const char *szFileName, bool bOverwrite = FALSE);
|
// create a new file (with the default value of bOverwrite, it will fail if
|
||||||
bool Open(const char *szFileName, OpenMode mode = read);
|
// 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
|
bool Close(); // Close is a NOP if not opened
|
||||||
|
|
||||||
// assign an existing file descriptor and get it back from wxFile object
|
// assign an existing file descriptor and get it back from wxFile object
|
||||||
@@ -94,7 +115,7 @@ public:
|
|||||||
bool Eof() const;
|
bool Eof() const;
|
||||||
// is an error occured?
|
// is an error occured?
|
||||||
bool Error() const { return m_error; }
|
bool Error() const { return m_error; }
|
||||||
|
|
||||||
// dtor closes the file if opened
|
// dtor closes the file if opened
|
||||||
~wxFile();
|
~wxFile();
|
||||||
|
|
||||||
@@ -116,7 +137,7 @@ private:
|
|||||||
// file (and close this one) or call Discard() to cancel the modification. If
|
// file (and close this one) or call Discard() to cancel the modification. If
|
||||||
// you call neither of them, dtor will call Discard().
|
// you call neither of them, dtor will call Discard().
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
class wxTempFile
|
class WXDLLEXPORT wxTempFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// ctors
|
// ctors
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
// Created: 29/01/98
|
// Created: 29/01/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||||
// Licence: wxWindows license
|
// Licence: wxWindows license
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// standard
|
// standard
|
||||||
#if defined(__WXMSW__) && !defined(__GNUWIN32__)
|
#if defined(__WXMSW__) && !defined(__GNUWIN32__)
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
#elif (defined(__UNIX__) || defined(__GNUWIN32__))
|
#elif (defined(__UNIX__) || defined(__GNUWIN32__))
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
#error "Please specify the header with file functions declarations."
|
#error "Please specify the header with file functions declarations."
|
||||||
#endif //Win/UNIX
|
#endif //Win/UNIX
|
||||||
|
|
||||||
#include <stdio.h> // SEEK_xxx constants
|
#include <stdio.h> // SEEK_xxx constants
|
||||||
@@ -87,17 +87,14 @@
|
|||||||
|
|
||||||
#define S_IFDIR _S_IFDIR
|
#define S_IFDIR _S_IFDIR
|
||||||
#define S_IFREG _S_IFREG
|
#define S_IFREG _S_IFREG
|
||||||
|
|
||||||
#define S_IREAD _S_IREAD
|
|
||||||
#define S_IWRITE _S_IWRITE
|
|
||||||
#else
|
#else
|
||||||
#define tell(fd) lseek(fd, 0, SEEK_CUR)
|
#define tell(fd) lseek(fd, 0, SEEK_CUR)
|
||||||
#endif //_MSC_VER
|
#endif //_MSC_VER
|
||||||
|
|
||||||
// there is no distinction between text and binary files under Unix
|
// there is no distinction between text and binary files under Unix
|
||||||
#ifdef __UNIX__
|
#ifdef __UNIX__
|
||||||
#define O_BINARY (0)
|
#define O_BINARY (0)
|
||||||
#endif //__UNIX__
|
#endif //__UNIX__
|
||||||
|
|
||||||
// wxWindows
|
// wxWindows
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
@@ -114,8 +111,8 @@
|
|||||||
// static functions
|
// static functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
bool wxFile::Exists(const char *sz)
|
bool wxFile::Exists(const char *sz)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
return !access(sz, 0) && !stat(sz, &st) && (st.st_mode & S_IFREG);
|
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
|
// 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,
|
// 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
|
// 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 ) {
|
if ( fd == -1 ) {
|
||||||
wxLogSysError(_("can't create file '%s'"), szFileName);
|
wxLogSysError(_("can't create file '%s'"), szFileName);
|
||||||
@@ -156,29 +153,29 @@ bool wxFile::Create(const char *szFileName, bool bOverwrite)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// open the file
|
// 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;
|
int flags = O_BINARY;
|
||||||
|
|
||||||
switch ( mode ) {
|
switch ( mode ) {
|
||||||
case read:
|
case read:
|
||||||
flags |= O_RDONLY;
|
flags |= O_RDONLY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case write:
|
case write:
|
||||||
flags |= O_WRONLY | O_CREAT | O_TRUNC;
|
flags |= O_WRONLY | O_CREAT | O_TRUNC;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case write_append:
|
case write_append:
|
||||||
flags |= O_WRONLY | O_APPEND;
|
flags |= O_WRONLY | O_APPEND;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case read_write:
|
case read_write:
|
||||||
flags |= O_RDWR;
|
flags |= O_RDWR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fd = open(szFileName, flags, S_IREAD | S_IWRITE);
|
int fd = open(szFileName, flags, access);
|
||||||
|
|
||||||
if ( fd == -1 ) {
|
if ( fd == -1 ) {
|
||||||
wxLogSysError(_("can't open file '%s'"), szFileName);
|
wxLogSysError(_("can't open file '%s'"), szFileName);
|
||||||
@@ -314,7 +311,7 @@ off_t wxFile::Length() const
|
|||||||
#else
|
#else
|
||||||
int iRc = tell(m_fd);
|
int iRc = tell(m_fd);
|
||||||
if ( iRc != -1 ) {
|
if ( iRc != -1 ) {
|
||||||
// @ have to use const_cast :-(
|
// @ have to use const_cast :-(
|
||||||
int iLen = ((wxFile *)this)->SeekEnd();
|
int iLen = ((wxFile *)this)->SeekEnd();
|
||||||
if ( iLen != -1 ) {
|
if ( iLen != -1 ) {
|
||||||
// restore old position
|
// restore old position
|
||||||
@@ -390,7 +387,7 @@ wxTempFile::wxTempFile(const wxString& strName)
|
|||||||
bool wxTempFile::Open(const wxString& strName)
|
bool wxTempFile::Open(const wxString& strName)
|
||||||
{
|
{
|
||||||
m_strName = strName;
|
m_strName = strName;
|
||||||
|
|
||||||
// we want to create the file in the same directory as strName because
|
// 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
|
// otherwise rename() in Commit() might not work (if the files are on
|
||||||
// different partitions for example). Unfortunately, the only standard
|
// different partitions for example). Unfortunately, the only standard
|
||||||
@@ -408,7 +405,7 @@ bool wxTempFile::Open(const wxString& strName)
|
|||||||
wxLogLastError("GetTempFileName");
|
wxLogLastError("GetTempFileName");
|
||||||
m_strTemp.UngetWriteBuf();
|
m_strTemp.UngetWriteBuf();
|
||||||
#endif // Windows/Unix
|
#endif // Windows/Unix
|
||||||
|
|
||||||
return m_file.Open(m_strTemp, wxFile::write);
|
return m_file.Open(m_strTemp, wxFile::write);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user