You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.4 KiB
146 lines
4.4 KiB
//+--------------------------------------------------------------
|
|
//
|
|
// 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;
|
|
}
|