95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
|
/*++
|
||
|
Copyright (c) 1992-1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
any.c
|
||
|
|
||
|
Abstract:
|
||
|
Contains routines to manipulate AsnAny structures.
|
||
|
|
||
|
SnmpUtilAsnAnyCpy
|
||
|
SnmpUtilAsnAnyFree
|
||
|
|
||
|
Environment:
|
||
|
User Mode - Win32
|
||
|
--*/
|
||
|
|
||
|
// Include files //
|
||
|
#include <snmp.h>
|
||
|
#include <snmputil.h>
|
||
|
|
||
|
|
||
|
// Public Procedures //
|
||
|
|
||
|
SNMPAPI SNMP_FUNC_TYPE SnmpUtilAsnAnyCpy(AsnAny * pAnyDst, AsnAny * pAnySrc)
|
||
|
/*++
|
||
|
Routine Description:
|
||
|
Copy a variable value.
|
||
|
Arguments:
|
||
|
pAnyDst - pointer to structure to receive value.
|
||
|
pAnySrc - pointer to value to copy.
|
||
|
Return Values:
|
||
|
Returns SNMPAPI_NOERROR if successful.
|
||
|
--*/
|
||
|
{
|
||
|
SNMPAPI nResult = SNMPAPI_NOERROR;
|
||
|
|
||
|
// determine asn type
|
||
|
switch (pAnySrc->asnType) {
|
||
|
case ASN_OBJECTIDENTIFIER:
|
||
|
// copy object identifier
|
||
|
nResult = SnmpUtilOidCpy(&pAnyDst->asnValue.object, &pAnySrc->asnValue.object);
|
||
|
break;
|
||
|
case ASN_OPAQUE:
|
||
|
case ASN_IPADDRESS:
|
||
|
case ASN_OCTETSTRING:
|
||
|
case ASN_BITS:
|
||
|
// copy octet string
|
||
|
nResult = SnmpUtilOctetsCpy(&pAnyDst->asnValue.string, &pAnySrc->asnValue.string);
|
||
|
break;
|
||
|
default:
|
||
|
// simply transfer entire structure
|
||
|
pAnyDst->asnValue = pAnySrc->asnValue;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// transfer type to destination
|
||
|
pAnyDst->asnType = pAnySrc->asnType;
|
||
|
|
||
|
return nResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID SNMP_FUNC_TYPE SnmpUtilAsnAnyFree(AsnAny * pAny)
|
||
|
/*++
|
||
|
Routine Description:
|
||
|
Release memory associated with variable value.
|
||
|
Arguments:
|
||
|
pAny - pointer to variable value to free.
|
||
|
--*/
|
||
|
{
|
||
|
// determine asn type
|
||
|
switch (pAny->asnType) {
|
||
|
case ASN_OBJECTIDENTIFIER:
|
||
|
// free object identifier
|
||
|
SnmpUtilOidFree(&pAny->asnValue.object);
|
||
|
break;
|
||
|
case ASN_OPAQUE:
|
||
|
case ASN_IPADDRESS:
|
||
|
case ASN_OCTETSTRING:
|
||
|
case ASN_BITS:
|
||
|
// free octet string
|
||
|
if (pAny->asnValue.string.dynamic)
|
||
|
{
|
||
|
SnmpUtilOctetsFree(&pAny->asnValue.string);
|
||
|
pAny->asnValue.string.dynamic = FALSE;
|
||
|
pAny->asnValue.string.stream = NULL;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// re-initialize
|
||
|
pAny->asnType = ASN_NULL;
|
||
|
}
|