/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */
class nsFileStreamBase : public nsISeekableStream, public nsIFileMetadata { public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSISEEKABLESTREAM
NS_DECL_NSITELLABLESTREAM
NS_DECL_NSIFILEMETADATA
/** * Flags describing our behavior. See the IDL file for possible values.
*/
int32_t mBehaviorFlags{0};
enum { // This is the default value. It will be changed by Deserialize or Init.
eUnitialized, // The opening has been deferred. See DEFER_OPEN.
eDeferredOpen, // The file has been opened. mFD is not null.
eOpened, // The file has been closed. mFD is null.
eClosed, // Something bad happen in the Open() or in Deserialize(). The actual // error value is stored in mErrorValue.
eError
} mState{eUnitialized};
/** * Data we need to do an open.
*/
OpenParams mOpenParams;
nsresult mErrorValue{NS_ERROR_FAILURE};
/** * Prepares the data we need to open the file, and either does the open now * by calling DoOpen(), or leaves it to be opened later by a call to * DoPendingOpen().
*/
nsresult MaybeOpen(nsIFile* aFile, int32_t aIoFlags, int32_t aPerm, bool aDeferred);
/** * Cleans up data prepared in MaybeOpen.
*/ void CleanUpOpen();
/** * Open the file. This is called either from MaybeOpen (during Init) * or from DoPendingOpen (if DEFER_OPEN is used when initializing this * stream). The default behavior of DoOpen is to open the file and save the * file descriptor.
*/ virtual nsresult DoOpen();
/** * Based on mState, this method does the opening, return an error, or do * nothing. If the return value is not NS_OK, please, return it back to the * callee.
*/ inline nsresult DoPendingOpen();
};
// nsFileInputStream is cloneable only on the parent process because only there // it can open the same file multiple times.
class nsFileInputStream : public nsFileStreamBase, public nsIFileInputStream, public nsILineInputStream, public nsIIPCSerializableInputStream, public nsICloneableInputStream { public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIFILEINPUTSTREAM
NS_DECL_NSILINEINPUTSTREAM
NS_DECL_NSIIPCSERIALIZABLEINPUTSTREAM
NS_DECL_NSICLONEABLEINPUTSTREAM
/** * The file being opened.
*/
nsCOMPtr<nsIFile> mFile; /** * The IO flags passed to Init() for the file open.
*/
int32_t mIOFlags{0}; /** * The permissions passed to Init() for the file open.
*/
int32_t mPerm{0};
/** * Cached position for Tell for automatically reopening streams.
*/
int64_t mCachedPosition{0};
protected: /** * Internal, called to open a file. Parameters are the same as their * Init() analogues.
*/
nsresult Open(nsIFile* file, int32_t ioFlags, int32_t perm);
class nsFileOutputStream : public nsFileStreamBase, public nsIFileOutputStream { public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIFILEOUTPUTSTREAM
NS_FORWARD_NSIOUTPUTSTREAM(nsFileStreamBase::)
/** * A safe file output stream that overwrites the destination file only * once writing is complete. This protects against incomplete writes * due to the process or the thread being interrupted or crashed.
*/ class nsAtomicFileOutputStream : public nsFileOutputStream, public nsISafeOutputStream { public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSISAFEOUTPUTSTREAM
/** * A safe file output stream that overwrites the destination file only * once writing + flushing is complete. This protects against more * classes of software/hardware errors than nsAtomicFileOutputStream, * at the expense of being more costly to the disk, OS and battery.
*/ class nsSafeFileOutputStream : public nsAtomicFileOutputStream { public:
NS_IMETHOD Finish() override;
};
class nsFileRandomAccessStream : public nsFileStreamBase, public nsIFileRandomAccessStream, public nsIInputStream, public nsIOutputStream { public: static nsresult Create(REFNSIID aIID, void** aResult);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.