X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f1a73c6a816aeba155e88c628a0a778a2fe068bd..8a4e043aef904eda398249dde995b6ddcc01a4ce:/include/wx/file.h diff --git a/include/wx/file.h b/include/wx/file.h index 5f00e49c11..044e891fa8 100644 --- a/include/wx/file.h +++ b/include/wx/file.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: file.h +// Name: wx/file.h // Purpose: wxFile - encapsulates low-level "file descriptor" // wxTempFile - safely replace the old file // Author: Vadim Zeitlin @@ -21,55 +21,6 @@ #include "wx/filefn.h" #include "wx/strconv.h" -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// 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 -enum wxPosixPermissions -{ - // standard Posix names for these permission flags: - wxS_IRUSR = 00400, - wxS_IWUSR = 00200, - wxS_IXUSR = 00100, - - wxS_IRGRP = 00040, - wxS_IWGRP = 00020, - wxS_IXGRP = 00010, - - wxS_IROTH = 00004, - wxS_IWOTH = 00002, - wxS_IXOTH = 00001, - - // longer but more readable synonims for the constants above: - wxPOSIX_USER_READ = wxS_IRUSR, - wxPOSIX_USER_WRITE = wxS_IWUSR, - wxPOSIX_USER_EXECUTE = wxS_IXUSR, - - wxPOSIX_GROUP_READ = wxS_IRGRP, - wxPOSIX_GROUP_WRITE = wxS_IWGRP, - wxPOSIX_GROUP_EXECUTE = wxS_IXGRP, - - wxPOSIX_OTHERS_READ = wxS_IROTH, - wxPOSIX_OTHERS_WRITE = wxS_IWOTH, - wxPOSIX_OTHERS_EXECUTE = wxS_IXOTH, - - // default mode for the new files: allow reading/writing them to everybody but - // the effective file mode will be set after anding this value with umask and - // so won't include wxS_IW{GRP,OTH} for the default 022 umask value - wxS_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | \ - wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | \ - wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE), - - // default mode for the new directories (see wxFileName::Mkdir): allow - // reading/writing/executing them to everybody, but just like wxS_DEFAULT - // the effective directory mode will be set after anding this value with umask - wxS_DIR_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | wxPOSIX_USER_EXECUTE | \ - wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | wxPOSIX_GROUP_EXECUTE | \ - wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE | wxPOSIX_OTHERS_EXECUTE) -}; - // ---------------------------------------------------------------------------- // class wxFile: raw file IO // @@ -98,11 +49,11 @@ public: // ctors // ----- // def ctor - wxFile() { m_fd = fd_invalid; m_error = false; } + wxFile() { m_fd = fd_invalid; m_lasterror = 0; } // open specified file (may fail, use IsOpened()) wxFile(const wxString& fileName, OpenMode mode = read); // attach to (already opened) file - wxFile(int lfd) { m_fd = lfd; m_error = false; } + wxFile(int lfd) { m_fd = lfd; m_lasterror = 0; } // open/close // create a new file (with the default value of bOverwrite, it will fail if @@ -114,7 +65,7 @@ public: bool Close(); // Close is a NOP if not opened // assign an existing file descriptor and get it back from wxFile object - void Attach(int lfd) { Close(); m_fd = lfd; m_error = false; } + void Attach(int lfd) { Close(); m_fd = lfd; m_lasterror = 0; } void Detach() { m_fd = fd_invalid; } int fd() const { return m_fd; } @@ -144,10 +95,15 @@ public: // is end of file reached? bool Eof() const; // has an error occurred? - bool Error() const { return m_error; } + bool Error() const { return m_lasterror != 0; } + // get last errno + int GetLastError() const { return m_lasterror; } + // reset error state + void ClearLastError() { m_lasterror = 0; } // type such as disk or pipe wxFileKind GetKind() const { return wxGetFileKind(m_fd); } + // dtor closes the file if opened ~wxFile() { Close(); } @@ -158,8 +114,16 @@ private: wxFile(const wxFile&); wxFile& operator=(const wxFile&); + // Copy the value of errno into m_lasterror if rc == -1 and return true in + // this case (indicating that we've got an error). Otherwise return false. + // + // Notice that we use the possibly 64 bit wxFileOffset instead of int here so + // that it works for checking the result of functions such as tell() too. + bool CheckForError(wxFileOffset rc) const; + + int m_fd; // file descriptor or INVALID_FD if not opened - bool m_error; // error memory + int m_lasterror; // errno value of last error }; // ----------------------------------------------------------------------------