diff options
-rw-r--r-- | lib/common/FileStream.cpp | 28 | ||||
-rw-r--r-- | lib/common/FileStream.h | 13 |
2 files changed, 40 insertions, 1 deletions
diff --git a/lib/common/FileStream.cpp b/lib/common/FileStream.cpp index 2e76460a..c4a979b5 100644 --- a/lib/common/FileStream.cpp +++ b/lib/common/FileStream.cpp @@ -33,6 +33,32 @@ FileStream::FileStream(const std::string& rFilename, int flags, int mode) mIsEOF(false), mFileName(rFilename) { + AfterOpen(); +} + +// -------------------------------------------------------------------------- +// +// Function +// Name: FileStream::FileStream(const char *, int, int) +// Purpose: Alternative constructor, takes a const char *, +// avoids const strings being interpreted as handles! +// Created: 2003/07/31 +// +// -------------------------------------------------------------------------- +FileStream::FileStream(const char *pFilename, int flags, int mode) +#ifdef WIN32 + : mOSFileHandle(::openfile(pFilename, flags, mode)), +#else + : mOSFileHandle(::open(pFilename, flags, mode)), +#endif + mIsEOF(false), + mFileName(pFilename) +{ + AfterOpen(); +} + +void FileStream::AfterOpen() +{ #ifdef WIN32 if(mOSFileHandle == INVALID_HANDLE_VALUE) #else @@ -48,7 +74,7 @@ FileStream::FileStream(const std::string& rFilename, int flags, int mode) else { BOX_LOG_SYS_WARNING("Failed to open file: " << - rFilename); + mFileName); THROW_EXCEPTION(CommonException, OSFileOpenError) } } diff --git a/lib/common/FileStream.h b/lib/common/FileStream.h index 5efb91ea..e3ab9f46 100644 --- a/lib/common/FileStream.h +++ b/lib/common/FileStream.h @@ -38,6 +38,18 @@ public: int flags = O_RDONLY, #endif int mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)); + + // Ensure that const char * name doesn't end up as a handle + // on Windows! + + FileStream(const char *pFilename, +#ifdef WIN32 + int flags = (O_RDONLY | O_BINARY), +#else + int flags = O_RDONLY, +#endif + int mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)); + FileStream(tOSFileHandle FileDescriptor); virtual ~FileStream(); @@ -56,6 +68,7 @@ private: tOSFileHandle mOSFileHandle; bool mIsEOF; FileStream(const FileStream &rToCopy) { /* do not call */ } + void AfterOpen(); // for debugging.. std::string mFileName; |