3 #include "nsIInputStream.h"
4 #include "nsIStringStream.h"
6 #include "StartupCacheUtils.h"
7 #include "mozilla/scache/StartupCache.h"
13 NS_NewObjectInputStreamFromBuffer(char* buffer
, PRUint32 len
,
14 nsIObjectInputStream
** stream
)
16 nsCOMPtr
<nsIStringInputStream
> stringStream
17 = do_CreateInstance("@mozilla.org/io/string-input-stream;1");
18 nsCOMPtr
<nsIObjectInputStream
> objectInput
19 = do_CreateInstance("@mozilla.org/binaryinputstream;1");
21 stringStream
->AdoptData(buffer
, len
);
22 objectInput
->SetInputStream(stringStream
);
24 objectInput
.forget(stream
);
29 NS_NewObjectOutputWrappedStorageStream(nsIObjectOutputStream
**wrapperStream
,
30 nsIStorageStream
** stream
)
32 nsCOMPtr
<nsIStorageStream
> storageStream
;
34 nsresult rv
= NS_NewStorageStream(256, PR_UINT32_MAX
, getter_AddRefs(storageStream
));
35 NS_ENSURE_SUCCESS(rv
, rv
);
37 nsCOMPtr
<nsIObjectOutputStream
> objectOutput
38 = do_CreateInstance("@mozilla.org/binaryoutputstream;1");
39 nsCOMPtr
<nsIOutputStream
> outputStream
40 = do_QueryInterface(storageStream
);
42 objectOutput
->SetOutputStream(outputStream
);
45 // Wrap in debug stream to detect unsupported writes of
46 // multiply-referenced non-singleton objects
47 StartupCache
* sc
= StartupCache::GetSingleton();
48 NS_ENSURE_TRUE(sc
, NS_ERROR_UNEXPECTED
);
49 nsCOMPtr
<nsIObjectOutputStream
> debugStream
;
50 sc
->GetDebugObjectOutputStream(objectOutput
, getter_AddRefs(debugStream
));
51 debugStream
.forget(wrapperStream
);
53 objectOutput
.forget(wrapperStream
);
56 storageStream
.forget(stream
);
61 NS_NewBufferFromStorageStream(nsIStorageStream
*storageStream
,
62 char** buffer
, PRUint32
* len
)
65 nsCOMPtr
<nsIInputStream
> inputStream
;
66 rv
= storageStream
->NewInputStream(0, getter_AddRefs(inputStream
));
67 NS_ENSURE_SUCCESS(rv
, rv
);
70 rv
= inputStream
->Available(&avail
);
71 NS_ENSURE_SUCCESS(rv
, rv
);
73 nsAutoArrayPtr
<char> temp (new char[avail
]);
74 rv
= inputStream
->Read(temp
, avail
, &read
);
75 if (NS_SUCCEEDED(rv
) && avail
!= read
)
76 rv
= NS_ERROR_UNEXPECTED
;
83 *buffer
= temp
.forget();