]> granicus.if.org Git - taglib/commitdiff
Added read-only support to FileStream
authorStephen F. Booth <me@sbooth.org>
Sat, 28 May 2011 17:29:06 +0000 (13:29 -0400)
committerStephen F. Booth <me@sbooth.org>
Sat, 28 May 2011 17:29:06 +0000 (13:29 -0400)
taglib/toolkit/tfilestream.cpp
taglib/toolkit/tfilestream.h

index ce2bf11f1ff91e44fb57037436b01ffafb2f1c83..45e4cdde913d1da1956a10a5e626b4c96e654c51 100644 (file)
@@ -68,7 +68,7 @@ struct FileNameHandle : public std::string
 class FileStream::FileStreamPrivate
 {
 public:
-  FileStreamPrivate(FileName fileName);
+  FileStreamPrivate(FileName fileName, bool openReadOnly);
 
   FILE *file;
 
@@ -79,7 +79,7 @@ public:
   static const uint bufferSize = 1024;
 };
 
-FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
+FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName, bool openReadOnly) :
   file(0),
   name(fileName),
   readOnly(true),
@@ -91,12 +91,16 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
 
   if(wcslen((const wchar_t *) fileName) > 0) {
 
-    file = _wfopen(name, L"rb+");
-
-    if(file)
-      readOnly = false;
-    else
+    if(openReadOnly)
       file = _wfopen(name, L"rb");
+    else {
+      file = _wfopen(name, L"rb+");
+
+      if(file)
+        readOnly = false;
+      else
+        file = _wfopen(name, L"rb");
+       }
 
     if(file)
       return;
@@ -105,12 +109,16 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
 
 #endif
 
-  file = fopen(name, "rb+");
-
-  if(file)
-    readOnly = false;
-  else
+  if(openReadOnly)
     file = fopen(name, "rb");
+  else {
+    file = fopen(name, "rb+");
+
+    if(file)
+      readOnly = false;
+    else
+      file = fopen(name, "rb");
+  }
 
   if(!file)
   {
@@ -122,9 +130,9 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
 // public members
 ////////////////////////////////////////////////////////////////////////////////
 
-FileStream::FileStream(FileName file)
+FileStream::FileStream(FileName file, bool openReadOnly)
 {
-  d = new FileStreamPrivate(file);
+  d = new FileStreamPrivate(file, openReadOnly);
 }
 
 FileStream::~FileStream()
index 65ed5fb5b8c9728018eedebb990150fd4aa1851a..fa113b738a7fe34ce92644997734dd1c90341459 100644 (file)
@@ -52,7 +52,7 @@ namespace TagLib {
      * Construct a File object and opens the \a file.  \a file should be a
      * be a C-string in the local file system encoding.
      */
-    FileStream(FileName file);
+    FileStream(FileName file, bool openReadOnly = false);
 
     /*!
      * Destroys this FileStream instance.