NT4/private/ole32/stg/docfile/wdffuncs.cxx
2020-09-30 17:12:29 +02:00

174 lines
4.9 KiB
C++

//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: wdffuncs.cxx
//
// Contents: CWrappedDocFile support methods
//
// History: 22-Jan-92 DrewB Created
//
//---------------------------------------------------------------
#include <dfhead.cxx>
#pragma hdrstop
//+--------------------------------------------------------------
//
// Member: CWrappedDocFile::DeleteContents, public
//
// Synopsis: Destroys the contents of a docfile
//
// Returns: Appropriate status code
//
// History: 24-Aug-92 DrewB Created
//
//---------------------------------------------------------------
#ifdef CODESEGMENTS
#pragma code_seg(SEG_CWrappedDocFile_DeleteContents) // Wrapdf_TEXT inline?
#endif
SCODE CWrappedDocFile::DeleteContents(void)
{
#ifdef WRAPPED_DELETE_CONTENTS
PDocFileIterator *pdfi;
SCODE sc;
SIterBuffer ib;
olDebugOut((DEB_ITRACE, "In CWrappedDocFile::DeleteContents:%p()\n",
this));
_ulChanged.Empty();
olChk(GetIterator(&pdfi));
for (;;)
{
if (FAILED(pdfi->BufferGetNext(&ib)))
break;
olChkTo(EH_pdfi, DestroyEntry(&ib.dfnName, FALSE));
}
olDebugOut((DEB_ITRACE, "Out CWrappedDocFile::DeleteContents\n"));
// Fall through
EH_pdfi:
pdfi->Release();
EH_Err:
return sc;
#else
olAssert(!aMsg("CWrappedDocFile::DeleteContents called"));
return STG_E_UNIMPLEMENTEDFUNCTION;
#endif
}
//+---------------------------------------------------------------------------
//
// Member: CWrappedDocFile::SetInitialState, private
//
// Synopsis: Sets inital values from a base or defaults
//
// Arguments: [pdfBase] - Base object or NULL
//
// Returns: Appropriate status code
//
// History: 11-Nov-92 DrewB Created
// 05-Sep-95 MikeHill Clear the time bits after CopyTimesFrom(base)
//
//----------------------------------------------------------------------------
#ifdef CODESEGMENTS
#pragma code_seg(SEG_CWrappedDocFile_SetInitialState)
#endif
SCODE CWrappedDocFile::SetInitialState(PDocFile *pdfBase)
{
SCODE sc;
olDebugOut((DEB_ITRACE, "In CWrappedDocFile::SetInitialState:%p(%p)\n",
this, pdfBase));
if (pdfBase == NULL)
{
TIME_T tm;
olChk(DfGetTOD(&tm));
_tten.SetTime(WT_CREATION, tm);
_tten.SetTime(WT_MODIFICATION, tm);
_tten.SetTime(WT_ACCESS, tm);
_clsid = CLSID_NULL;
_grfStateBits = 0;
}
else
{
olChk(CopyTimesFrom(pdfBase));
// There's no need for the time bits to be dirty; they don't need
// to be written to the base because they were just read from the base.
_fDirty &= ~(BOOL)( DIRTY_CREATETIME | DIRTY_MODIFYTIME | DIRTY_ACCESSTIME );
olChk(pdfBase->GetClass(&_clsid));
olChk(pdfBase->GetStateBits(&_grfStateBits));
}
olDebugOut((DEB_ITRACE, "Out CWrappedDocFile::SetInitialState\n"));
// Fall through
EH_Err:
return sc;
}
//+---------------------------------------------------------------------------
//
// Member: CWrappedDocFile::RevertUpdate, private
//
// Synopsis: Reverses an update list entry's effect
//
// Arguments: [pud] - Update entry
//
// Returns: Appropriate status code
//
// History: 25-Jan-93 DrewB Created
//
//----------------------------------------------------------------------------
#ifdef CODESEGMENTS
#pragma code_seg(SEG_CWrappedDocFile_RevertUpdate) // Wrapdf_Revert_TEXT
#endif
void CWrappedDocFile::RevertUpdate(CUpdate *pud)
{
olDebugOut((DEB_ITRACE, "In CWrappedDocFile::RevertUpdate:%p(%p)\n",
this, pud));
if (pud->IsCreate())
{
CDFBasis *pdfb = BP_TO_P(CDFBasis *, _pdfb);
olAssert(pud->GetLUID() != DF_NOLUID);
_ppubdf->DestroyChild(pud->GetLUID());
if ((pud->GetFlags() & (ULF_TYPEFLAGS & STGTY_REAL)) == STGTY_STORAGE)
{
CDocFile::Unreserve(1, pdfb);
CWrappedDocFile::Unreserve(_ppubdf->GetTransactedDepth()-1,
pdfb);
}
else
{
CDirectStream::Unreserve(1, pdfb);
CTransactedStream::Unreserve(_ppubdf->GetTransactedDepth()-1,
pdfb);
}
}
else if (pud->IsRename())
{
// Roll back renames
olAssert(_ppubdf->FindXSMember(pud->GetOriginalName(),
GetName()) == NULL &&
aMsg("Revert rename precondition"));
_ppubdf->RenameChild(pud->GetCurrentName(), GetName(),
pud->GetOriginalName());
olAssert(_ppubdf->FindXSMember(pud->GetCurrentName(),
GetName()) == NULL &&
aMsg("Revert rename postcondition"));
}
olDebugOut((DEB_ITRACE, "Out CWrappedDocFile::RevertUpdate\n"));
}