windows-nt/Source/XPSP1/NT/com/ole32/stg/docfile/dfstream.cxx

136 lines
3.5 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 1992.
//
// File: dfstream.cxx
//
// Contents: Implementations of CDocFile stream methods
//
// History: 18-Oct-91 DrewB Created
//
//---------------------------------------------------------------
#include <dfhead.cxx>
#pragma hdrstop
//+--------------------------------------------------------------
//
// Method: CDocFile::CreateStream, public
//
// Synopsis: Creates a named stream in a DocFile
//
// Arguments: [pwcsName] - Name of the stream
// [df] - Transactioning flags
// [dlSet] - LUID to set or DF_NOLUID
// [dwType] - Type of entry to be created
// [ppsstStream] - Pointer to storage for the stream pointer
//
// Returns: Appropriate error code
//
// Modifies: [ppsstStream]
//
// History: 22-Aug-91 DrewB Created
//
//---------------------------------------------------------------
#ifdef CODESEGMENTS
#pragma code_seg(SEG_CDocFile_CreateStream) // Dirdf_Create_TEXT
#endif
SCODE CDocFile::CreateStream(CDfName const *pdfn,
DFLAGS const df,
DFLUID dlSet,
PSStream **ppsstStream)
{
SCODE sc;
CDirectStream *pstm;
olDebugOut((DEB_ITRACE, "In CDocFile::CreateStream("
"%ws, %X, %lu, %p)\n",
pdfn, df, dlSet, ppsstStream));
UNREFERENCED_PARM(df);
if (dlSet == DF_NOLUID)
dlSet = CDirectStream::GetNewLuid(_pdfb->GetMalloc());
#ifndef REF
pstm = new (BP_TO_P(CDFBasis *, _pdfb)) CDirectStream(dlSet);
olAssert(pstm != NULL && aMsg("Reserved stream unavailable"));
#else
olMem(pstm = new CDirectStream(dlSet));
#endif //!REF
olChkTo(EH_pstm, pstm->Init(&_stgh, pdfn, TRUE));
*ppsstStream = pstm;
olDebugOut((DEB_ITRACE, "Out CDocFile::CreateStream => %p\n",
*ppsstStream));
return S_OK;
EH_pstm:
#ifndef REF
pstm->ReturnToReserve(BP_TO_P(CDFBasis *, _pdfb));
#else
delete pstm;
EH_Err:
#endif //!REF
return sc;
}
//+--------------------------------------------------------------
//
// Method: CDocFile::GetStream, public
//
// Synopsis: Retrieves an existing stream from a DocFile
//
// Arguments: [pwcsName] - Name of the stream
// [df] - Transactioning flags
// [dwType] - Type of entry
// [ppsstStream] - Pointer to storage for the stream pointer
//
// Returns: Appropriate error code
//
// Modifies: [ppsstStream]
//
// History: 22-Aug-91 DrewB Created
//
//---------------------------------------------------------------
#ifdef CODESEGMENTS
#pragma code_seg(SEG_CDocFile_GetStream) // Dirdf_Open_TEXT
#endif
SCODE CDocFile::GetStream(CDfName const *pdfn,
DFLAGS const df,
PSStream **ppsstStream)
{
SCODE sc;
CDirectStream *pstm;
olDebugOut((DEB_ITRACE, "In CDocFile::GetStream(%ws, %X, %p)\n",
pdfn, df, ppsstStream));
UNREFERENCED_PARM(df);
DFLUID dl = CDirectStream::GetNewLuid(_pdfb->GetMalloc());
#ifndef REF
olMem(pstm = new(_pdfb->GetMalloc()) CDirectStream(dl));
#else
olMem(pstm = new CDirectStream(dl));
#endif //!REF
olChkTo(EH_pstm, pstm->Init(&_stgh, pdfn, FALSE));
*ppsstStream = pstm;
olDebugOut((DEB_ITRACE, "Out CDocFile::GetStream => %p\n",
*ppsstStream));
return S_OK;
EH_pstm:
delete pstm;
EH_Err:
return sc;
}