Browse Source

add truncate parameter to open_write

David Rose 23 years ago
parent
commit
35afd13237
2 changed files with 15 additions and 10 deletions
  1. 14 9
      dtool/src/dtoolutil/filename.cxx
  2. 1 1
      dtool/src/dtoolutil/filename.h

+ 14 - 9
dtool/src/dtoolutil/filename.cxx

@@ -1199,21 +1199,26 @@ open_read(ifstream &stream) const {
 //               or set_binary().
 ////////////////////////////////////////////////////////////////////
 bool Filename::
-open_write(ofstream &stream) const {
+open_write(ofstream &stream, bool truncate) const {
   assert(is_text() || is_binary());
 
   int open_mode = ios::out;
 
+  if (truncate) {
+    open_mode |= ios::trunc;
+
+  } else {
 #ifdef WIN32_VC
-  // Windows insists on having this set to prevent the file from being
-  // truncated when we open it.  Makes ios::trunc kind of pointless,
-  // doesn't it?  On the other hand, setting ios::in also seems to
-  // imply ios::nocreate (!), so we should only set this if the file
-  // already exists.
-  if (exists()) {
-    open_mode |= ios::in;
-  }
+    // Windows insists on having ios::in set to prevent the file from
+    // being truncated when we open it.  Makes ios::trunc kind of
+    // pointless, doesn't it?  On the other hand, setting ios::in also
+    // seems to imply ios::nocreate (!), so we should only set this if
+    // the file already exists.
+    if (exists()) {
+      open_mode |= ios::in;
+    }
 #endif
+  }
 
 #ifdef HAVE_IOS_BINARY
   // For some reason, some systems (like Irix) don't define

+ 1 - 1
dtool/src/dtoolutil/filename.h

@@ -150,7 +150,7 @@ PUBLISHED:
   bool scan_directory(vector_string &contents) const;
 
   bool open_read(ifstream &stream) const;
-  bool open_write(ofstream &stream) const;
+  bool open_write(ofstream &stream, bool truncate = false) const;
   bool open_append(ofstream &stream) const;
   bool open_read_write(fstream &stream) const;