From a04da3f1592a8833fe2c55b6aa3177bbec0202b5 Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sat, 28 May 2011 13:29:06 -0400 Subject: [PATCH] Added read-only support to FileStream --- taglib/toolkit/tfilestream.cpp | 36 +++++++++++++++++++++------------- taglib/toolkit/tfilestream.h | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/taglib/toolkit/tfilestream.cpp b/taglib/toolkit/tfilestream.cpp index ce2bf11f..45e4cdde 100644 --- a/taglib/toolkit/tfilestream.cpp +++ b/taglib/toolkit/tfilestream.cpp @@ -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() diff --git a/taglib/toolkit/tfilestream.h b/taglib/toolkit/tfilestream.h index 65ed5fb5..fa113b73 100644 --- a/taglib/toolkit/tfilestream.h +++ b/taglib/toolkit/tfilestream.h @@ -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.