2020-09-30 17:12:32 +02:00

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;
}