From be673ef2a38ce4109dd4e3a50e0361cd498fff83 Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Thu, 13 Jan 2000 09:11:01 +0000 Subject: [PATCH] Added --- netwerk/base/public/nsIFileStreams.idl | 162 +++++++++++++++++++ netwerk/base/src/nsBufferedStreams.cpp | 177 +++++++++++++++++++++ netwerk/base/src/nsBufferedStreams.h | 100 ++++++++++++ netwerk/base/src/nsFileStreams.cpp | 207 +++++++++++++++++++++++++ netwerk/base/src/nsFileStreams.h | 87 +++++++++++ 5 files changed, 733 insertions(+) create mode 100644 netwerk/base/public/nsIFileStreams.idl create mode 100644 netwerk/base/src/nsBufferedStreams.cpp create mode 100644 netwerk/base/src/nsBufferedStreams.h create mode 100644 netwerk/base/src/nsFileStreams.cpp create mode 100644 netwerk/base/src/nsFileStreams.h diff --git a/netwerk/base/public/nsIFileStreams.idl b/netwerk/base/public/nsIFileStreams.idl new file mode 100644 index 000000000000..abc36b46b86d --- /dev/null +++ b/netwerk/base/public/nsIFileStreams.idl @@ -0,0 +1,162 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +#include "nsIInputStream.idl" +#include "nsIOutputStream.idl" +#include "nsILocalFile.idl" + +[scriptable, uuid(e3d56a20-c7ec-11d3-8cda-0060b0fc14a3)] +interface nsIFileInputStream : nsIInputStream +{ + void init(in nsILocalFile file); +}; + +[scriptable, uuid(e6f68040-c7ec-11d3-8cda-0060b0fc14a3)] +interface nsIFileOutputStream : nsIOutputStream +{ + void init(in nsILocalFile file, in long flags, in long mode); +}; + +[scriptable, uuid(e9de5df0-c7ec-11d3-8cda-0060b0fc14a3)] +interface nsIRandomAccessStore : nsISupports +{ + // correspond to PRSeekWhence values + const long NS_SEEK_SET = 0; + const long NS_SEEK_CUR = 1; + const long NS_SEEK_END = 2; + + void seek(in long whence, in long offset); + long tell(); +}; + +%{C++ + +#include "prio.h" // for read/write modes, etc. + +#define NS_FILEINPUTSTREAM_CLASSNAME "File Input Stream" +#define NS_FILEINPUTSTREAM_PROGID "component://netscape/network/file-input-stream" + +#define NS_FILEINPUTSTREAM_CID \ +{ /* be9a53ae-c7e9-11d3-8cda-0060b0fc14a3 */ \ + 0xbe9a53ae, \ + 0xc7e9, \ + 0x11d3, \ + {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ +} + +#define NS_FILEOUTPUTSTREAM_CLASSNAME "File Output Stream" +#define NS_FILEOUTPUTSTREAM_PROGID "component://netscape/network/file-output-stream" + +#define NS_FILEOUTPUTSTREAM_CID \ +{ /* c272fee0-c7e9-11d3-8cda-0060b0fc14a3 */ \ + 0xc272fee0, \ + 0xc7e9, \ + 0x11d3, \ + {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ +} + +// move to nsNetUtil.h later... + +#include "nsILoadGroup.h" +#include "nsIInterfaceRequestor.h" +#include "nsCOMPtr.h" +#include "nsIServiceManager.h" +#include "nsIChannel.h" +#include "nsILocalFile.h" +#include "nsIInputStream.h" +#include "nsIOutputStream.h" + +inline nsresult +NS_NewFileChannel(nsIFile* file, + PRInt32 mode, + const char* contentType, + PRUint32 contentLength, + nsILoadGroup* group, + nsIInterfaceRequestor* notificationCallbacks, + nsLoadFlags loadAttributes, + nsIURI* originalURI, + PRUint32 bufferSegmentSize, + PRUint32 bufferMaxSize, + nsIFileChannel **result) +{ + nsresult rv; + nsCOMPtr channel; + static NS_DEFINE_CID(kFileChannelCID, NS_FILECHANNEL_CID); + rv = nsComponentManager::CreateInstance(kFileChannelCID, + nsnull, + NS_GET_IID(nsIFileChannel), + getter_AddRefs(channel)); + if (NS_FAILED(rv)) return rv; + rv = channel->Init(file, mode, contentType, contentLength, group, + notificationCallbacks, loadAttributes, originalURI, + bufferSegmentSize, bufferMaxSize); + if (NS_FAILED(rv)) return rv; + + *result = channel; + NS_ADDREF(*result); + return NS_OK; +} + +inline nsresult +NS_NewFileInputStream(nsIFile* file, nsIInputStream* *result) +{ + nsresult rv; + nsCOMPtr in; + static NS_DEFINE_CID(kFileInputStreamCID, NS_FILEINPUTSTREAM_CID); + rv = nsComponentManager::CreateInstance(kFileInputStreamCID, + nsnull, + NS_GET_IID(nsIFileInputStream), + getter_AddRefs(in)); + if (NS_FAILED(rv)) return rv; + nsCOMPtr localFile = do_QueryInterface(file, &rv); + if (NS_FAILED(rv)) return rv; + rv = in->Init(localFile); + if (NS_FAILED(rv)) return rv; + + *result = in; + NS_ADDREF(*result); + return NS_OK; +} + +inline nsresult +NS_NewFileOutputStream(nsIFile* file, PRInt32 flags, PRInt32 mode, + nsIOutputStream* *result) +{ + nsresult rv; + nsCOMPtr out; + static NS_DEFINE_CID(kFileOutputStreamCID, NS_FILEOUTPUTSTREAM_CID); + rv = nsComponentManager::CreateInstance(kFileOutputStreamCID, + nsnull, + NS_GET_IID(nsIFileOutputStream), + getter_AddRefs(out)); + if (NS_FAILED(rv)) return rv; + nsCOMPtr localFile = do_QueryInterface(file, &rv); + if (NS_FAILED(rv)) return rv; + rv = out->Init(localFile, flags, mode); + if (NS_FAILED(rv)) return rv; + + *result = out; + NS_ADDREF(*result); + return NS_OK; +} + +%} diff --git a/netwerk/base/src/nsBufferedStreams.cpp b/netwerk/base/src/nsBufferedStreams.cpp new file mode 100644 index 000000000000..4e01fe128713 --- /dev/null +++ b/netwerk/base/src/nsBufferedStreams.cpp @@ -0,0 +1,177 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +#include "nsBufferedStreams.h" + +//////////////////////////////////////////////////////////////////////////////// +// nsBufferedStream + +nsBufferedStream::nsBufferedStream() + : mBuffer(nsnull), + mBufferStartOffset(0), + mCursor(0) +{ + NS_INIT_REFCNT(); +} + +nsBufferedStream::~nsBufferedStream() +{ + Close(); +} + +NS_IMPL_ISUPPORTS2(nsBufferedStream, + nsIBaseStream, + nsIRandomAccessStore); + +nsresult +nsBufferedStream::Init(PRUint32 BufferedSize, nsIBaseStream* stream) +{ + NS_ASSERTION(stream, "need to supply a stream"); + NS_ASSERTION(mStream == nsnull, "already inited"); + mStream = stream; + mBufferSize = BufferedSize; + mBufferStartOffset = 0; + mCursor = 0; + mBuffer = new char[BufferedSize]; + if (mBuffer == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + return NS_OK; +} + +NS_IMETHODIMP +nsBufferedStream::Close() +{ + if (mStream) { + return mStream->Close(); + mStream = nsnull; + delete mBuffer; + mBuffer = nsnull; + mBufferSize = 0; + mBufferStartOffset = 0; + mCursor = 0; + } + return NS_OK; +} + +NS_IMETHODIMP +nsBufferedStream::Seek(PRInt32 whence, PRInt32 offset) +{ + if (mStream == nsnull) + return NS_BASE_STREAM_CLOSED; + + if (whence == nsIRandomAccessStore::NS_SEEK_CUR && + mCursor + offset < mBufferStartOffset + mBufferSize) { + mCursor += offset; + return NS_OK; + } + // XXX more... + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsBufferedStream::Tell(PRInt32 *result) +{ + if (mStream == nsnull) + return NS_BASE_STREAM_CLOSED; + + return NS_ERROR_NOT_IMPLEMENTED; +} + +//////////////////////////////////////////////////////////////////////////////// +// nsBufferedInputStream + +NS_IMPL_ISUPPORTS_INHERITED1(nsBufferedInputStream, + nsBufferedStream, + nsIInputStream); + +NS_METHOD +nsBufferedInputStream::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + NS_ENSURE_NO_AGGREGATION(aOuter); + + nsBufferedInputStream* stream = new nsBufferedInputStream(); + if (stream == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(stream); + nsresult rv = stream->QueryInterface(aIID, aResult); + NS_RELEASE(stream); + return rv; +} + +NS_IMETHODIMP +nsBufferedInputStream::Close() +{ + return nsBufferedStream::Close(); +} + +NS_IMETHODIMP +nsBufferedInputStream::Available(PRUint32 *result) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsBufferedInputStream::Read(char * buf, PRUint32 count, PRUint32 *result) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +//////////////////////////////////////////////////////////////////////////////// +// nsBufferedOutputStream + +NS_IMPL_ISUPPORTS_INHERITED1(nsBufferedOutputStream, + nsBufferedStream, + nsIOutputStream); + +NS_METHOD +nsBufferedOutputStream::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + NS_ENSURE_NO_AGGREGATION(aOuter); + + nsBufferedOutputStream* stream = new nsBufferedOutputStream(); + if (stream == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(stream); + nsresult rv = stream->QueryInterface(aIID, aResult); + NS_RELEASE(stream); + return rv; +} + +NS_IMETHODIMP +nsBufferedOutputStream::Close() +{ + return nsBufferedStream::Close(); +} + +NS_IMETHODIMP +nsBufferedOutputStream::Write(const char *buf, PRUint32 count, PRUint32 *result) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsBufferedOutputStream::Flush(void) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/netwerk/base/src/nsBufferedStreams.h b/netwerk/base/src/nsBufferedStreams.h new file mode 100644 index 000000000000..6a165586ab0b --- /dev/null +++ b/netwerk/base/src/nsBufferedStreams.h @@ -0,0 +1,100 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +#ifndef nsBufferedStreams_h__ +#define nsBufferedStreams_h__ + +#include "nsIFileStreams.h" +#include "nsIInputStream.h" +#include "nsIOutputStream.h" +#include "nsCOMPtr.h" + +//////////////////////////////////////////////////////////////////////////////// + +class nsBufferedStream : public nsIBaseStream, + public nsIRandomAccessStore +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIBASESTREAM + NS_DECL_NSIRANDOMACCESSSTORE + + nsBufferedStream(); + virtual ~nsBufferedStream(); + + nsresult Init(PRUint32 bufferSize, nsIBaseStream* stream); + +protected: + PRUint32 mBufferSize; + char* mBuffer; + PRUint32 mBufferStartOffset; + PRUint32 mCursor; + nsCOMPtr mStream; +}; + +//////////////////////////////////////////////////////////////////////////////// + +class nsBufferedInputStream : public nsBufferedStream, + public nsIInputStream +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIBASESTREAM + NS_DECL_NSIINPUTSTREAM + NS_DECL_NSIRANDOMACCESSSTORE + + nsBufferedInputStream() : nsBufferedStream() {} + virtual ~nsBufferedInputStream() {} + + static NS_METHOD + Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); + + nsIInputStream* Source() { + return (nsIInputStream*)mStream.get(); + } +}; + +//////////////////////////////////////////////////////////////////////////////// + +class nsBufferedOutputStream : public nsBufferedStream, + public nsIOutputStream +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIBASESTREAM + NS_DECL_NSIOUTPUTSTREAM + NS_DECL_NSIRANDOMACCESSSTORE + + nsBufferedOutputStream() : nsBufferedStream() {} + virtual ~nsBufferedOutputStream() {} + + static NS_METHOD + Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); + + nsIOutputStream* Sink() { + return (nsIOutputStream*)mStream.get(); + } +}; + +//////////////////////////////////////////////////////////////////////////////// + +#endif // nsBufferedStreams_h__ diff --git a/netwerk/base/src/nsFileStreams.cpp b/netwerk/base/src/nsFileStreams.cpp new file mode 100644 index 000000000000..e438fda06073 --- /dev/null +++ b/netwerk/base/src/nsFileStreams.cpp @@ -0,0 +1,207 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +#include "nsFileStreams.h" +#include "nsILocalFile.h" +#include "prerror.h" + +//////////////////////////////////////////////////////////////////////////////// +// nsFileStream + +nsFileStream::nsFileStream() + : mFD(nsnull) +{ + NS_INIT_REFCNT(); +} + +nsFileStream::~nsFileStream() +{ + Close(); +} + +NS_IMPL_ISUPPORTS2(nsFileStream, + nsIBaseStream, + nsIRandomAccessStore); + +NS_IMETHODIMP +nsFileStream::Close() +{ + if (mFD) { + PR_Close(mFD); + mFD = nsnull; + } + return NS_OK; +} + +NS_IMETHODIMP +nsFileStream::Seek(PRInt32 whence, PRInt32 offset) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 cnt = PR_Seek(mFD, offset, (PRSeekWhence)whence); + if (cnt == -1) { + return NS_ErrorAccordingToNSPR(); + } + return NS_OK; +} + +NS_IMETHODIMP +nsFileStream::Tell(PRInt32 *result) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 cnt = PR_Seek(mFD, 0, PR_SEEK_CUR); + if (cnt == -1) { + return NS_ErrorAccordingToNSPR(); + } + *result = cnt; + return NS_OK; +} + +//////////////////////////////////////////////////////////////////////////////// +// nsFileInputStream + +NS_IMPL_ISUPPORTS_INHERITED2(nsFileInputStream, + nsFileStream, + nsIInputStream, + nsIFileInputStream); + +NS_METHOD +nsFileInputStream::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + NS_ENSURE_NO_AGGREGATION(aOuter); + + nsFileInputStream* stream = new nsFileInputStream(); + if (stream == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(stream); + nsresult rv = stream->QueryInterface(aIID, aResult); + NS_RELEASE(stream); + return rv; +} + +NS_IMETHODIMP +nsFileInputStream::Init(nsILocalFile* file) +{ + NS_ASSERTION(mFD == nsnull, "already inited"); + return file->OpenNSPRFileDesc(PR_RDONLY, 0, &mFD); +} + +NS_IMETHODIMP +nsFileInputStream::Close() +{ + return nsFileStream::Close(); +} + +NS_IMETHODIMP +nsFileInputStream::Available(PRUint32 *result) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 avail = PR_Available(mFD); + if (avail == -1) { + return NS_ErrorAccordingToNSPR(); + } + *result = avail; + return NS_OK; +} + +NS_IMETHODIMP +nsFileInputStream::Read(char * buf, PRUint32 count, PRUint32 *result) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 cnt = PR_Read(mFD, buf, count); + if (cnt == -1) { + return NS_ErrorAccordingToNSPR(); + } + *result = cnt; + return NS_OK; +} + +//////////////////////////////////////////////////////////////////////////////// +// nsFileOutputStream + +NS_IMPL_ISUPPORTS_INHERITED2(nsFileOutputStream, + nsFileStream, + nsIOutputStream, + nsIFileOutputStream); + +NS_METHOD +nsFileOutputStream::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + NS_ENSURE_NO_AGGREGATION(aOuter); + + nsFileOutputStream* stream = new nsFileOutputStream(); + if (stream == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(stream); + nsresult rv = stream->QueryInterface(aIID, aResult); + NS_RELEASE(stream); + return rv; +} + +NS_IMETHODIMP +nsFileOutputStream::Init(nsILocalFile* file, PRInt32 flags, PRInt32 mode) +{ + NS_ASSERTION(mFD == nsnull, "already inited"); + return file->OpenNSPRFileDesc(flags, mode, &mFD); +} + +NS_IMETHODIMP +nsFileOutputStream::Close() +{ + return nsFileStream::Close(); +} + +NS_IMETHODIMP +nsFileOutputStream::Write(const char *buf, PRUint32 count, PRUint32 *result) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 cnt = PR_Write(mFD, buf, count); + if (cnt == -1) { + return NS_ErrorAccordingToNSPR(); + } + *result = cnt; + return NS_OK; +} + +NS_IMETHODIMP +nsFileOutputStream::Flush(void) +{ + if (mFD == nsnull) + return NS_BASE_STREAM_CLOSED; + + PRInt32 cnt = PR_Sync(mFD); + if (cnt == -1) { + return NS_ErrorAccordingToNSPR(); + } + return NS_OK; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/netwerk/base/src/nsFileStreams.h b/netwerk/base/src/nsFileStreams.h new file mode 100644 index 000000000000..43b51458c2b4 --- /dev/null +++ b/netwerk/base/src/nsFileStreams.h @@ -0,0 +1,87 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +#ifndef nsFileStreams_h__ +#define nsFileStreams_h__ + +#include "nsIFileStreams.h" +#include "nsIFile.h" +#include "nsIInputStream.h" +#include "nsIOutputStream.h" +#include "nsCOMPtr.h" + +//////////////////////////////////////////////////////////////////////////////// + +class nsFileStream : public nsIBaseStream, + public nsIRandomAccessStore +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIBASESTREAM + NS_DECL_NSIRANDOMACCESSSTORE + + nsFileStream(); + virtual ~nsFileStream(); + +protected: + PRFileDesc* mFD; +}; + +//////////////////////////////////////////////////////////////////////////////// + +class nsFileInputStream : public nsFileStream, + public nsIFileInputStream +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIBASESTREAM + NS_DECL_NSIINPUTSTREAM + NS_DECL_NSIFILEINPUTSTREAM + + nsFileInputStream() : nsFileStream() {} + virtual ~nsFileInputStream() {} + + static NS_METHOD + Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); +}; + +//////////////////////////////////////////////////////////////////////////////// + +class nsFileOutputStream : public nsFileStream, + public nsIFileOutputStream +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIBASESTREAM + NS_DECL_NSIOUTPUTSTREAM + NS_DECL_NSIFILEOUTPUTSTREAM + + nsFileOutputStream() : nsFileStream() {} + virtual ~nsFileOutputStream() {} + + static NS_METHOD + Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); +}; + +//////////////////////////////////////////////////////////////////////////////// + +#endif // nsFileStreams_h__