From 036a0317b928f74de63fb197a29dc8e0e1e8cf4f Mon Sep 17 00:00:00 2001 From: safu9 <30684866+safu9@users.noreply.github.com> Date: Thu, 11 Oct 2018 01:25:02 +0900 Subject: [PATCH] Add support for file descriptor to FileStream (#832) Add support for file descriptor --- taglib/toolkit/tfilestream.cpp | 29 +++++++++++++++++++++++++++++ taglib/toolkit/tfilestream.h | 5 +++++ 2 files changed, 34 insertions(+) diff --git a/taglib/toolkit/tfilestream.cpp b/taglib/toolkit/tfilestream.cpp index 17a09f3d..7e75e396 100644 --- a/taglib/toolkit/tfilestream.cpp +++ b/taglib/toolkit/tfilestream.cpp @@ -58,6 +58,11 @@ namespace #endif } + FileHandle openFile(const int fileDescriptor, bool readOnly) + { + return InvalidFileHandle; + } + void closeFile(FileHandle file) { CloseHandle(file); @@ -98,6 +103,11 @@ namespace return fopen(path, readOnly ? "rb" : "rb+"); } + FileHandle openFile(const int fileDescriptor, bool readOnly) + { + return fdopen(fileDescriptor, readOnly ? "rb" : "rb+"); + } + void closeFile(FileHandle file) { fclose(file); @@ -158,6 +168,25 @@ FileStream::FileStream(FileName fileName, bool openReadOnly) } } +FileStream::FileStream(int fileDescriptor, bool openReadOnly) + : d(new FileStreamPrivate("")) +{ + // First try with read / write mode, if that fails, fall back to read only. + + if(!openReadOnly) + d->file = openFile(fileDescriptor, false); + + if(d->file != InvalidFileHandle) + d->readOnly = false; + else + d->file = openFile(fileDescriptor, true); + + if(d->file == InvalidFileHandle) + { + debug("Could not open file using file descriptor"); + } +} + FileStream::~FileStream() { if(isOpen()) diff --git a/taglib/toolkit/tfilestream.h b/taglib/toolkit/tfilestream.h index 96a476d6..aa4d71b3 100644 --- a/taglib/toolkit/tfilestream.h +++ b/taglib/toolkit/tfilestream.h @@ -54,6 +54,11 @@ namespace TagLib { */ FileStream(FileName file, bool openReadOnly = false); + /*! + * Construct a File object and opens the \a file using file descriptor. + */ + FileStream(int fileDescriptor, bool openReadOnly = false); + /*! * Destroys this FileStream instance. */ -- 2.40.0