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.
|
|
/*
Copyright (c) 1998-1999 Microsoft Corporation
Module Name: blbatt.cpp
Abstract:
Author:
*/
#include "stdafx.h"
#include "blbgen.h"
#include "blbatt.h"
// variants are validated in the get/set safearray methods
// bstrs are validated in the GetBstrCopy and SetBstr methods. they may also
// be optionally validated before taking any action, if there is a possibility
// of having to roll back some of the work done on finding them invalid
STDMETHODIMP ITAttributeListImpl::get_Count(LONG * pVal) { BAIL_IF_NULL(pVal, E_INVALIDARG); CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
*pVal = (LONG)m_SdpAttributeList->GetSize();
return S_OK; }
STDMETHODIMP ITAttributeListImpl::get_Item(LONG Index, BSTR * pVal) { CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
// vb indices are in the range [1..GetSize()]
if ( !((1 <= Index) && (Index <= m_SdpAttributeList->GetSize())) ) { return E_INVALIDARG; }
// adjust the index to the range [0..(GetSize()-1)]
return ((SDP_REQD_BSTRING_LINE *)m_SdpAttributeList->GetAt(Index-1))->GetBstrCopy(pVal); }
STDMETHODIMP ITAttributeListImpl::Add(LONG Index, BSTR Attribute) { BAIL_IF_NULL(Attribute, E_INVALIDARG);
CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
// index should be in the range [1..GetSize()+1]
if ( !((1 <= Index) && (Index <= (m_SdpAttributeList->GetSize()+1))) ) { return E_INVALIDARG; } // create an attribute line
SDP_REQD_BSTRING_LINE *AttributeLine = (SDP_REQD_BSTRING_LINE *)m_SdpAttributeList->CreateElement();
if( NULL == AttributeLine ) { return E_OUTOFMEMORY; }
// set the passed in attribute in the attribute line
HRESULT ToReturn = AttributeLine->SetBstr(Attribute); if ( FAILED(ToReturn) ) { delete AttributeLine; return ToReturn; }
// insert the attribute line, shift elements with equal or higher indices forwards
m_SdpAttributeList->InsertAt(Index-1, AttributeLine); return S_OK; }
STDMETHODIMP ITAttributeListImpl::Delete(LONG Index) { CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
// vb indices are in the range [1..GetSize()]
if ( !((1 <= Index) && (Index <= m_SdpAttributeList->GetSize())) ) { return E_INVALIDARG; }
// adjust the index to the range [0..(GetSize()-1)]
// delete the attribute line, remove the ptr from the array; shifting elements with higher
// index lower
delete m_SdpAttributeList->GetAt(Index-1); m_SdpAttributeList->RemoveAt(Index-1);
return S_OK; }
STDMETHODIMP ITAttributeListImpl::get_AttributeList(VARIANT /*SAFEARRAY(BSTR)*/ * pVal) { CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
return m_SdpAttributeList->GetSafeArray(pVal); }
STDMETHODIMP ITAttributeListImpl::put_AttributeList(VARIANT /*SAFEARRAY(BSTR)*/ newVal) { CLock Lock(g_DllLock); ASSERT(NULL != m_SdpAttributeList);
if ( NULL == V_ARRAY(&newVal) ) { m_SdpAttributeList->Reset(); return S_OK; }
return m_SdpAttributeList->SetSafeArray(newVal); }
|