summaryrefslogtreecommitdiff
path: root/lib/common/InvisibleTempFileStream.cpp
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2006-10-13 23:03:23 +0000
committerChris Wilson <chris+github@qwirx.com>2006-10-13 23:03:23 +0000
commit9635631135e1f0df36a0b038f047384dd9d8c8c0 (patch)
tree23c91d2ea5ba5b6e00c853bdff67cd222f7c6768 /lib/common/InvisibleTempFileStream.cpp
parentf1ae01e66e6d2ed9072d17943fb04ccea0dbe592 (diff)
* Added support for Win32 temporary files
* Added InvisibleTempFileStream class and unit tests for it * Use InvisibleTempFileStream instead of FileStream for temporary files (refs #3)
Diffstat (limited to 'lib/common/InvisibleTempFileStream.cpp')
-rw-r--r--lib/common/InvisibleTempFileStream.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/common/InvisibleTempFileStream.cpp b/lib/common/InvisibleTempFileStream.cpp
new file mode 100644
index 00000000..a7e19ad3
--- /dev/null
+++ b/lib/common/InvisibleTempFileStream.cpp
@@ -0,0 +1,39 @@
+// --------------------------------------------------------------------------
+//
+// File
+// Name: InvisibleTempFileStream.cpp
+// Purpose: IOStream interface to temporary files that
+// delete themselves
+// Created: 2006/10/13
+//
+// --------------------------------------------------------------------------
+
+#include "Box.h"
+#include "InvisibleTempFileStream.h"
+
+#include "MemLeakFindOn.h"
+
+// --------------------------------------------------------------------------
+//
+// Function
+// Name: InvisibleTempFileStream::InvisibleTempFileStream
+// (const char *, int, int)
+// Purpose: Constructor, opens invisible file
+// Created: 2006/10/13
+//
+// --------------------------------------------------------------------------
+InvisibleTempFileStream::InvisibleTempFileStream(const char *Filename, int flags, int mode)
+#ifdef WIN32
+ : FileStream(::openfile(Filename, flags | O_TEMPORARY, mode))
+#else
+ : FileStream(::open(Filename, flags, mode))
+#endif
+{
+ #ifndef WIN32
+ if(unlink(Filename) != 0)
+ {
+ MEMLEAKFINDER_NOT_A_LEAK(this);
+ THROW_EXCEPTION(CommonException, OSFileOpenError)
+ }
+ #endif
+}