void addq(SnmpMgmtQuery *q, RFC1157VarBind *vb, UINT i, UINT v) { SNMPDBG((SNMP_LOG_TRACE, "SNMP: PDU: adding variable %d to query 0x%08lx (%s).\n", i+1, q->addr, SnmpUtilOidToA(&vb->name))); q->vbl.len++; // add varbind to end of list q->vbl.list = (RFC1157VarBind *)SnmpUtilMemReAlloc(q->vbl.list, (q->vbl.len * sizeof(RFC1157VarBind))); q->xlat = (RFC1157VarBindXlat *)SnmpUtilMemReAlloc(q->xlat, (q->vbl.len * sizeof(RFC1157VarBindXlat))); q->xlat[q->vbl.len-1].view = v; q->xlat[q->vbl.len-1].index = i; SnmpUtilVarBindCpy(&q->vbl.list[q->vbl.len-1], vb); } // end addq()
/*********************************************************************** * SnmpUtilVarBindListCpy (SNMPAPI.@) */ INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *dst, SnmpVarBindList *src) { unsigned int i, size; SnmpVarBind *src_entry, *dst_entry; TRACE("(%p, %p)\n", dst, src); if (!src) { dst->list = NULL; dst->len = 0; return SNMPAPI_NOERROR; } size = src->len * sizeof(SnmpVarBind); if (!(dst->list = HeapAlloc(GetProcessHeap(), 0, size))) return SNMPAPI_ERROR; src_entry = src->list; dst_entry = dst->list; for (i = 0; i < src->len; i++) { if (SnmpUtilVarBindCpy(dst_entry, src_entry)) { src_entry++; dst_entry++; } else { for (--i; i > 0; i--) SnmpUtilVarBindFree(--dst_entry); HeapFree(GetProcessHeap(), 0, dst->list); return SNMPAPI_ERROR; } } dst->len = src->len; return SNMPAPI_NOERROR; }