Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1992-1997 Microsoft Corporation
Module Name:
octets.c
Abstract:
Contains routines to manipulate octet strings.
SnmpUtilOctetsCpy SnmpUtilOctetsFree
Environment:
User Mode - Win32
Revision History:
--*/
///////////////////////////////////////////////////////////////////////////////
// //
// Include files //
// //
///////////////////////////////////////////////////////////////////////////////
#include <snmp.h>
#include <snmputil.h>
///////////////////////////////////////////////////////////////////////////////
// //
// Public Procedures //
// //
///////////////////////////////////////////////////////////////////////////////
SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsCpy( AsnOctetString * pOctetsDst, AsnOctetString * pOctetsSrc )
/*++
Routine Description:
Copy an octet string.
Arguments:
pOctetsDst - pointer to structure to receive octets.
pOctetsSrc - pointer to octets to copy.
Return Values:
Returns SNMPAPI_NOERROR if successful.
--*/
{ SNMPAPI nResult = SNMPAPI_ERROR;
// validate pointers
if (pOctetsDst != NULL) { // initialize
pOctetsDst->stream = NULL; pOctetsDst->length = 0; pOctetsDst->dynamic = FALSE;
// make sure there are bytes
if ((pOctetsSrc != NULL) && (pOctetsSrc->stream != NULL) && (pOctetsSrc->length != 0)) {
// attempt to allocate octet string
pOctetsDst->stream = SnmpUtilMemAlloc(pOctetsSrc->length); // validate pointer
if (pOctetsDst->stream != NULL) {
// denote allocated type
pOctetsDst->dynamic = TRUE;
// transfer octet string length
pOctetsDst->length = pOctetsSrc->length;
// copy
memcpy(pOctetsDst->stream, pOctetsSrc->stream, pOctetsSrc->length );
nResult = SNMPAPI_NOERROR; // success...
} else { SNMPDBG(( SNMP_LOG_ERROR, "SNMP: API: could not allocate octet string.\n" ));
SetLastError(SNMP_MEM_ALLOC_ERROR); }
} else {
// copying null string
nResult = SNMPAPI_NOERROR; }
} else {
SNMPDBG(( SNMP_LOG_ERROR, "SNMP: API: null octet string pointer.\n" ));
SetLastError(ERROR_INVALID_PARAMETER); }
return nResult; }
VOID SNMP_FUNC_TYPE SnmpUtilOctetsFree( AsnOctetString * pOctets )
/*++
Routine Description:
Releases memory for an octet string.
Arguments:
pOctets - pointer to octets to release.
Return Values:
None.
--*/
{ // validate pointers
if ((pOctets != NULL) && (pOctets->stream != NULL) && (pOctets->dynamic == TRUE)) {
// release memory for octets
SnmpUtilMemFree(pOctets->stream);
// re-initialize
pOctets->dynamic = FALSE; pOctets->stream = NULL; pOctets->length = 0; } }
SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsNCmp( AsnOctetString * pOctets1, AsnOctetString * pOctets2, UINT nChars )
/*++
Routine Description:
Compares two octet strings up to a certain number of characters.
Arguments:
pOctets1 - pointer to first octet string.
pOctets2 - pointer to second octet string.
nChars - maximum characters to compare.
Return Values:
< 0 first parameter is 'less than' second. 0 first parameter is 'equal to' second. > 0 first parameter is 'greater than' second.
--*/
{ UINT i = 0; INT nResult = 0;
// validate pointers
if ((pOctets1 != NULL) && (pOctets2 != NULL)) {
// calculate maximum number of subidentifiers to compare
UINT nMaxChars = min(nChars, min(pOctets1->length, pOctets2->length));
// loop through the subidentifiers
while((nResult == 0) && (i < nMaxChars)) {
// compare each subidentifier
nResult = pOctets1->stream[i] - pOctets2->stream[i++]; }
// check for second being subset
if ((nResult == 0) && (i < nChars)) {
// determine order by length of oid
nResult = pOctets1->length - pOctets2->length; } } return nResult; }
SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsCmp( AsnOctetString * pOctets1, AsnOctetString * pOctets2 )
/*++
Routine Description:
Compares two octet strings.
Arguments:
pOctets1 - pointer to first octet string.
pOctets2 - pointer to second octet string.
Return Values:
< 0 first parameter is 'less than' second. 0 first parameter is 'equal to' second. > 0 first parameter is 'greater than' second.
--*/
{ // forward request above
return SnmpUtilOctetsNCmp( pOctets1, pOctets2, max(pOctets1->length,pOctets2->length) ); }
|