|
|
//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: pdffuncs.cxx
//
// Contents: PDocFile static member functions
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
#include <dfhead.cxx>
#pragma hdrstop
#include <tstream.hxx>
//+---------------------------------------------------------------------------
//
// Member: PDocFile::CreateFromUpdate, public
//
// Synopsis: Creates an object from an update list entry
//
// Arguments: [pud] - Update entry
// [pdf] - Docfile
// [df] - Permissions
//
// Returns: Appropriate status code
//
// History: 02-Nov-92 DrewB Created
//
//----------------------------------------------------------------------------
SCODE PDocFile::CreateFromUpdate(CUpdate *pud, PDocFile *pdf, DFLAGS df) { PDocFile *pdfChild = NULL; PSStream *pstChild = NULL; SCODE sc;
olDebugOut((DEB_ITRACE, "In PDocFile::CreateFromUpdate(%p, %p, %X)\n", pud, pdf, df)); olAssert(pud->GetXSM() != NULL); switch(pud->GetFlags() & (ULF_TYPEFLAGS & STGTY_REAL)) { case STGTY_STORAGE: olChk(pdf->CreateDocFile(pud->GetCurrentName(), df, pud->GetLUID(), pud->GetFlags() & ULF_TYPEFLAGS, &pdfChild)); olChkTo(EH_Create, ((CWrappedDocFile *)pud->GetXSM())->SetBase(pdfChild)); break; case STGTY_STREAM: olChk(pdf->CreateStream(pud->GetCurrentName(), df, pud->GetLUID(), pud->GetFlags() & ULF_TYPEFLAGS, &pstChild)); olChkTo(EH_Create, ((CTransactedStream *)pud->GetXSM())->SetBase(pstChild)); break; default: olAssert(FALSE && aMsg("Unknown type in update list entry")); olErr(EH_Err, STG_E_DOCFILECORRUPT); break; } olDebugOut((DEB_ITRACE, "Out PDocFile::CreateFromUpdate\n")); return S_OK;
EH_Create: if ((pud->GetFlags() & (ULF_TYPEFLAGS & STGTY_REAL)) == STGTY_STORAGE) if (pdfChild) pdfChild->Release(); else { olAssert((pud->GetFlags() & (ULF_TYPEFLAGS & STGTY_REAL)) == STGTY_STREAM); if (pstChild) pstChild->Release(); } olVerSucc(pdf->DestroyEntry(pud->GetCurrentName(), TRUE)); EH_Err: return sc; }
//+--------------------------------------------------------------
//
// Member: PDocFile::ExcludeEntries, public
//
// Synopsis: Excludes the given entries
//
// Arguments: [snbExclude] - Entries to exclude
//
// Returns: Appropriate status code
//
// History: 26-Mar-92 DrewB Created
//
//---------------------------------------------------------------
SCODE PDocFile::ExcludeEntries(PDocFile *pdf, SNBW snbExclude) { PSStream *psstChild = NULL; PDocFile *pdfChild = NULL; SCODE sc; CDfName dfnKey; SIterBuffer ib;
olDebugOut((DEB_ITRACE, "In PDocFile::ExcludeEntries(%p)\n", snbExclude)); for (;;) { if (FAILED(pdf->FindGreaterEntry(&dfnKey, &ib, NULL))) break; dfnKey.Set(&ib.dfnName);
if (NameInSNB(&ib.dfnName, snbExclude) == S_OK) { switch(REAL_STGTY(ib.type)) { case STGTY_STORAGE: olChkTo(EH_pwcsName, pdf->GetDocFile(&ib.dfnName, DF_READ | DF_WRITE, ib.type, &pdfChild)); olChkTo(EH_Get, pdfChild->DeleteContents()); pdfChild->Release(); break; case STGTY_STREAM: olChkTo(EH_pwcsName, pdf->GetStream(&ib.dfnName, DF_WRITE, ib.type, &psstChild)); olChkTo(EH_Get, psstChild->SetSize(0)); psstChild->Release(); break; } } } olDebugOut((DEB_ITRACE, "Out ExcludeEntries\n")); return S_OK;
EH_Get: if (REAL_STGTY(ib.type) == STGTY_STORAGE && pdfChild) pdfChild->Release(); else if (REAL_STGTY(ib.type) == STGTY_STREAM && psstChild) psstChild->Release(); EH_pwcsName: return sc; }
|