/*++ 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 #include // 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; }