1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef nsTemporaryFileInputStream_h__
- #define nsTemporaryFileInputStream_h__
- #include "mozilla/Mutex.h"
- #include "nsAutoPtr.h"
- #include "nsIInputStream.h"
- #include "nsIIPCSerializableInputStream.h"
- #include "nsISeekableStream.h"
- #include "prio.h"
- class nsTemporaryFileInputStream : public nsIInputStream
- , public nsISeekableStream
- , public nsIIPCSerializableInputStream
- {
- public:
- //used to release a PRFileDesc
- class FileDescOwner
- {
- friend class nsTemporaryFileInputStream;
- public:
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FileDescOwner)
- explicit FileDescOwner(PRFileDesc* aFD)
- : mFD(aFD),
- mMutex("FileDescOwner::mMutex")
- {
- MOZ_ASSERT(aFD);
- }
- private:
- ~FileDescOwner()
- {
- PR_Close(mFD);
- }
- public:
- mozilla::Mutex& FileMutex() { return mMutex; }
- private:
- PRFileDesc* mFD;
- mozilla::Mutex mMutex;
- };
- nsTemporaryFileInputStream(FileDescOwner* aFileDescOwner, uint64_t aStartPos, uint64_t aEndPos);
- nsTemporaryFileInputStream();
- NS_DECL_THREADSAFE_ISUPPORTS
- NS_DECL_NSIINPUTSTREAM
- NS_DECL_NSISEEKABLESTREAM
- NS_DECL_NSIIPCSERIALIZABLEINPUTSTREAM
- private:
- virtual ~nsTemporaryFileInputStream() { }
- RefPtr<FileDescOwner> mFileDescOwner;
- uint64_t mStartPos;
- uint64_t mCurPos;
- uint64_t mEndPos;
- bool mClosed;
- };
- #endif // nsTemporaryFileInputStream_h__
|