1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #include "mozilla/Attributes.h"
6 #include "msgCore.h"
7 #include "nsIInputStream.h"
8 #include "nsIOutputStream.h"
9 #include "nsISeekableStream.h"
10 #include "prio.h"
11 
12 class nsMsgFileStream final : public nsIInputStream,
13                               public nsIOutputStream,
14                               public nsISeekableStream {
15  public:
16   nsMsgFileStream();
17 
18   NS_DECL_ISUPPORTS
19 
20   NS_IMETHOD Available(uint64_t* _retval) override;
21   NS_IMETHOD Read(char* aBuf, uint32_t aCount, uint32_t* _retval) override;
22   NS_IMETHOD ReadSegments(nsWriteSegmentFun aWriter, void* aClosure,
23                           uint32_t aCount, uint32_t* _retval) override;
24   NS_DECL_NSIOUTPUTSTREAM
25   NS_DECL_NSISEEKABLESTREAM
26   NS_DECL_NSITELLABLESTREAM
27 
28   nsresult InitWithFile(nsIFile* localFile);
29 
30  protected:
31   ~nsMsgFileStream();
32 
33   PRFileDesc* mFileDesc;
34   bool mSeekedToEnd;
35 };
36