0027838: Foundation Classes - support wchar_t* input within TCollection_AsciiString...
[occt.git] / src / FSD / FSD_CmpFile.cxx
index eb0fd57..1378512 100644 (file)
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement.
 
-
 #include <FSD_CmpFile.hxx>
+
 #include <OSD.hxx>
+#include <OSD_OpenFile.hxx>
 #include <Standard_PCharacter.hxx>
 #include <Storage_BaseDriver.hxx>
 #include <Storage_StreamExtCharParityError.hxx>
@@ -79,40 +80,46 @@ Storage_Error FSD_CmpFile::Open(const TCollection_AsciiString& aName,const Stora
   SetName(aName);
 
   if (OpenMode() == Storage_VSNone) {
-
-#if defined(_WNT32)
-    TCollection_ExtendedString aWName(aName);
-    if (aMode == Storage_VSRead) {
-      myStream.open((const wchar_t*)aWName.ToExtString(),ios::in|ios::binary); // ios::nocreate is not portable
-    }
-    else if (aMode == Storage_VSWrite) {
-      myStream.open((const wchar_t*)aWName.ToExtString(),ios::out|ios::binary);
-    }
-    else if (aMode == Storage_VSReadWrite) {
-      myStream.open((const wchar_t*)aWName.ToExtString(),ios::in|ios::out|ios::binary);
-    }
-#elif !defined(IRIX) && !defined(DECOSF1)
-    if (aMode == Storage_VSRead) {
-      myStream.open(aName.ToCString(),ios::in|ios::binary); // ios::nocreate is not portable
+    std::ios_base::openmode anOpenMode = std::ios_base::openmode(0);
+    switch (aMode)
+    {
+      case Storage_VSNone:
+      {
+        break;
+      }
+      case Storage_VSRead:
+      {
+        // ios::nocreate is not portable
+      #if !defined(IRIX) && !defined(DECOSF1)
+        anOpenMode = ios::in | ios::binary;
+      #else
+        anOpenMode = ios::in;
+      #endif
+        break;
+      }
+      case Storage_VSWrite:
+      {
+      #if !defined(IRIX) && !defined(DECOSF1)
+        anOpenMode = ios::out | ios::binary;
+      #else
+        anOpenMode = ios::out;
+      #endif
+        break;
+      }
+      case Storage_VSReadWrite:
+      {
+      #if !defined(IRIX) && !defined(DECOSF1)
+        anOpenMode = ios::in | ios::out | ios::binary;
+      #else
+        anOpenMode = ios::in | ios::out;
+      #endif
+        break;
+      }
     }
-    else if (aMode == Storage_VSWrite) {
-      myStream.open(aName.ToCString(),ios::out|ios::binary);
+    if (anOpenMode != 0)
+    {
+      OSD_OpenStream (myStream, aName, anOpenMode);
     }
-    else if (aMode == Storage_VSReadWrite) {
-      myStream.open(aName.ToCString(),ios::in|ios::out|ios::binary);
-    }
-#else
-    if (aMode == Storage_VSRead) {
-      myStream.open(aName.ToCString(),ios::in); // ios::nocreate is not portable
-    }
-    else if (aMode == Storage_VSWrite) {
-      myStream.open(aName.ToCString(),ios::out);
-    }
-    else if (aMode == Storage_VSReadWrite) {
-      myStream.open(aName.ToCString(),ios::in|ios::out);
-    }
-#endif
-
     if (myStream.fail()) {
       result = Storage_VSOpenError;
     }