WindowsXP-SP1/ds/adsi/nwnds/adscopy.cxx
2020-09-30 16:53:49 +02:00

142 lines
3.5 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: adscopy.cxx
//
// Contents: ADS Object Copy Routines
//
// Functions:
//
// History: 25-Apr-96 KrishnaG Created.
//
//
// Issues: Check null ptrs for AllocADsMem and AllocADsStr
//
// Object Types 6, 13, 16, and 21 are flaky - pay extra attn.
//
//
//----------------------------------------------------------------------------
#include "nds.hxx"
//
// ADsType objects copy code
//
HRESULT
ADsTypeCopy(
PADSVALUE lpADsSrcObject,
PADSVALUE lpADsDestObject
)
{
HRESULT hr = S_OK;
lpADsDestObject->dwType = lpADsSrcObject->dwType;
switch (lpADsSrcObject->dwType) {
case ADSTYPE_DN_STRING:
lpADsDestObjec->DnString = lpADsSrcObject->DNString;
break;
case ADSTYPE_CASE_EXACT_STRING:
lpADsDestObjec->CaseExactString = lpADsSrcObject->CaseExactString;
break;
case ADSTYPE_CASE_IGNORE_STRING:
lpADsDestObjec->CaseIgnoreString = lpADsSrcObject->CaseIgnoreString;
break;
case ADSTYPE_PRINTABLE_STRING:
lpADsDestObjec->PrintableString = lpADsSrcObject->PrintableString;
break;
case ADSTYPE_NUMERIC_STRING:
lpADsDestObjec->NumericString = lpADsSrcObject->NumericString;
break;
case ADSTYPE_BOOLEAN:
lpADsDestObjec->Boolean = lpADsSrcObject->Boolean;
break;
case ADSTYPE_INTEGER:
lpADsDestObjec->Integer = lpADsSrcObject->Integer;
break;
case ADSTYPE_OCTET_STRING:
lpADsDestObjec->OctetString.dwLength = lpADsSrcObject->OctetString.dwLength;
lpADsDestObjec->OctetString.lpValue = AllocADsMem(lpADsSrcObject->OctetString.dwLength);
if (!lpADsDestObjec->OctetString.lpValue) {
RRETURN(E_OUTOFMEMORY);
}
break;
case ADSTYPE_UTC_TIME:
lpADsDestObjec->UTCTime = lpADsSrcObject->UTCTime;
break;
case ADSTYPE_LARGE_INTEGER:
lpADsDestObjec->LargeInteger = lpADsSrcObject->LargeInteger;
break;
case ADSTYPE_PROV_SPECIFIC:
lpADsDestObjec->ProviderSpecific.dwLength = lpADsSrcObject->ProviderSpecific.dwLength;
lpADsDestObjec->ProviderSpecific.lpValue = AllocADsMem(lpADsSrcObject->ProviderSpecific.dwLength);
if (!lpADsDestObjec->ProviderSpecific.lpValue) {
RRETURN(E_OUTOFMEMORY);
}
lpADsDestObjec->DnString = lpADsSrcObject->DNString;
break;
case ADSTYPE_OBJECT_CLASS:
lpADsDestObjec->ClassName = lpADsSrcObject->ClassName;
break;
default:
hr = E_FAIL;
break;
}
RRETURN(hr);
}
HRESULT
ADsTypeCopyConstruct(
LPADSVALUE pADsSrcObjects,
DWORD dwNumObjects,
LPADSVALUE * ppADsDestObjects
)
{
DWORD i = 0;
LPADSVALUE pADsDestObjects = NULL;
HRESULT hr = S_OK;
pADsDestObjects = (LPADSVALUE)AllocADsMem(
dwNumObjects * sizeof(ADSVALUE)
);
if (!pADsDestObjects) {
RRETURN(E_FAIL);
}
for (i = 0; i < dwNumObjects; i++ ) {
hr = ADsTypeCopy(pADsSrcObjects + i, pADsDestObjects + i);
}
*ppADsDestObjects = pADsDestObjects;
RRETURN(S_OK);
}