summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/common/FileStream.cpp28
-rw-r--r--lib/common/FileStream.h13
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;