1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "FileStreams.h"
9 #include "QuotaManager.h"
14 template <class FileStreamBase
>
16 FileQuotaStream
<FileStreamBase
>::SetEOF()
18 nsresult rv
= FileStreamBase::SetEOF();
19 NS_ENSURE_SUCCESS(rv
, rv
);
23 nsresult rv
= FileStreamBase::Tell(&offset
);
24 NS_ENSURE_SUCCESS(rv
, rv
);
26 mQuotaObject
->UpdateSize(offset
);
32 template <class FileStreamBase
>
34 FileQuotaStream
<FileStreamBase
>::Close()
36 nsresult rv
= FileStreamBase::Close();
37 NS_ENSURE_SUCCESS(rv
, rv
);
39 mQuotaObject
= nullptr;
44 template <class FileStreamBase
>
46 FileQuotaStream
<FileStreamBase
>::DoOpen()
48 QuotaManager
* quotaManager
= QuotaManager::Get();
49 NS_ASSERTION(quotaManager
, "Shouldn't be null!");
51 NS_ASSERTION(!mQuotaObject
, "Creating quota object more than once?");
52 mQuotaObject
= quotaManager
->GetQuotaObject(mPersistenceType
, mGroup
, mOrigin
,
53 FileStreamBase::mOpenParams
.localFile
);
55 nsresult rv
= FileStreamBase::DoOpen();
56 NS_ENSURE_SUCCESS(rv
, rv
);
58 if (mQuotaObject
&& (FileStreamBase::mOpenParams
.ioFlags
& PR_TRUNCATE
)) {
59 mQuotaObject
->UpdateSize(0);
65 template <class FileStreamBase
>
67 FileQuotaStreamWithWrite
<FileStreamBase
>::Write(const char* aBuf
,
73 if (FileQuotaStreamWithWrite::mQuotaObject
) {
75 rv
= FileStreamBase::Tell(&offset
);
76 NS_ENSURE_SUCCESS(rv
, rv
);
78 if (!FileQuotaStreamWithWrite::
79 mQuotaObject
->MaybeAllocateMoreSpace(offset
, aCount
)) {
80 return NS_ERROR_FILE_NO_DEVICE_SPACE
;
84 rv
= FileStreamBase::Write(aBuf
, aCount
, _retval
);
85 NS_ENSURE_SUCCESS(rv
, rv
);
90 NS_IMPL_ISUPPORTS_INHERITED0(FileInputStream
, nsFileInputStream
)
92 already_AddRefed
<FileInputStream
>
93 FileInputStream::Create(PersistenceType aPersistenceType
,
94 const nsACString
& aGroup
, const nsACString
& aOrigin
,
95 nsIFile
* aFile
, int32_t aIOFlags
, int32_t aPerm
,
96 int32_t aBehaviorFlags
)
98 nsRefPtr
<FileInputStream
> stream
=
99 new FileInputStream(aPersistenceType
, aGroup
, aOrigin
);
100 nsresult rv
= stream
->Init(aFile
, aIOFlags
, aPerm
, aBehaviorFlags
);
101 NS_ENSURE_SUCCESS(rv
, nullptr);
102 return stream
.forget();
105 NS_IMPL_ISUPPORTS_INHERITED0(FileOutputStream
, nsFileOutputStream
)
107 already_AddRefed
<FileOutputStream
>
108 FileOutputStream::Create(PersistenceType aPersistenceType
,
109 const nsACString
& aGroup
, const nsACString
& aOrigin
,
110 nsIFile
* aFile
, int32_t aIOFlags
, int32_t aPerm
,
111 int32_t aBehaviorFlags
)
113 nsRefPtr
<FileOutputStream
> stream
=
114 new FileOutputStream(aPersistenceType
, aGroup
, aOrigin
);
115 nsresult rv
= stream
->Init(aFile
, aIOFlags
, aPerm
, aBehaviorFlags
);
116 NS_ENSURE_SUCCESS(rv
, nullptr);
117 return stream
.forget();
120 NS_IMPL_ISUPPORTS_INHERITED0(FileStream
, nsFileStream
)
122 already_AddRefed
<FileStream
>
123 FileStream::Create(PersistenceType aPersistenceType
, const nsACString
& aGroup
,
124 const nsACString
& aOrigin
, nsIFile
* aFile
, int32_t aIOFlags
,
125 int32_t aPerm
, int32_t aBehaviorFlags
)
127 nsRefPtr
<FileStream
> stream
=
128 new FileStream(aPersistenceType
, aGroup
, aOrigin
);
129 nsresult rv
= stream
->Init(aFile
, aIOFlags
, aPerm
, aBehaviorFlags
);
130 NS_ENSURE_SUCCESS(rv
, nullptr);
131 return stream
.forget();