Leaked source code of windows server 2003
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.
 
 
 
 
 
 

120 lines
3.4 KiB

//-----------------------------------------------------------------------------
//
// File: _blobfile.inl
// Copyright (C) 1994-1997 Microsoft Corporation
// All rights reserved.
//
//
//
//-----------------------------------------------------------------------------
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gets the position with in the file. The position can be set (by calling
// 'Seek()') beyond the end of the data in the file, even beyond the space
// allocated for the file. In any case, 'Read()' and 'Write()' will deal with
// that.
//------------------------------------------------------------------------------
inline
DWORD //Returns current file position
CBlobFile::GetPosition() const
{
ASSERT_VALID(this);
return m_nPosition;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gets the actual data size in the file, which is what determines the end
// of file during readings.
//------------------------------------------------------------------------------
inline
DWORD //Returns the file data length in bytes.
CBlobFile::GetLength() const
{
ASSERT_VALID(this);
return m_nFileSize;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Since we keep the file in memory always, we don't need to flush.
//------------------------------------------------------------------------------
inline
void CBlobFile::Flush()
{
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Aborting is like closing.
//------------------------------------------------------------------------------
inline
void CBlobFile::Abort()
{
ASSERT_VALID(this);
Close();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Unsupported function
//------------------------------------------------------------------------------
inline
void CBlobFile::LockRange(DWORD /* dwPos */, DWORD /* dwCount */)
{
AfxThrowNotSupportedException();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Unsupported function
//------------------------------------------------------------------------------
inline
void CBlobFile::UnlockRange(DWORD /* dwPos */, DWORD /* dwCount */)
{
AfxThrowNotSupportedException();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Unsupported function
//------------------------------------------------------------------------------
inline
CFile* CBlobFile::Duplicate() const
{
AfxThrowNotSupportedException();
return NULL;
}
inline
UINT CBlobFile::GetBlobSize(void) const
{
ASSERT_VALID(this);
return m_blobData.GetBlobSize();
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// That's the only way to that a caller can have access to the buffer data
// of the blobfile's internal cowblob.
//
//-----------------------------------------------------------------------------
inline
CBlobFile::operator const CLocCOWBlob &(void)
{
return GetBlob();
}
inline
const CLocCOWBlob &
CBlobFile::GetBlob(void)
{
if (m_pBuffer != NULL)
{
m_blobData.ReleasePointer();
m_pBuffer = NULL;
}
//Set correct requested cowblob size before giving access to the data.
m_blobData.ReallocBlob(m_nFileSize);
return m_blobData;
}