windows-nt/Source/XPSP1/NT/net/snmp/common/dll/any.c

161 lines
3.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1992-1997 Microsoft Corporation
Module Name:
any.c
Abstract:
Contains routines to manipulate AsnAny structures.
SnmpUtilAsnAnyCpy
SnmpUtilAsnAnyFree
Environment:
User Mode - Win32
Revision History:
--*/
///////////////////////////////////////////////////////////////////////////////
// //
// 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.
Return Values:
None.
--*/
{
// 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;
}