[5] snmpapi: Implement SnmpUtilVarBindListCpy and SnmpUtilVarBindListFree.

Robert Shearman rob at codeweavers.com
Mon Jan 15 08:08:15 CST 2007


Hans Leidekker wrote:
> +
> +/***********************************************************************
> + *      SnmpUtilVarBindListCpy  (SNMPAPI.@)
> + */
> +INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *dst, SnmpVarBindList *src)
> +{
> +    unsigned int i, size;
> +    SnmpVarBind *src_entry, *dst_entry;
> +
> +    TRACE("(%p, %p)\n", dst, src);
> +
> +    size = sizeof(SnmpVarBindList);
> +    if (!(dst = HeapAlloc(GetProcessHeap(), 0, size))) return SNMPAPI_ERROR;
>   

Where do you return this memory to the caller?

> +
> +    size = src->len * sizeof(SnmpVarBind *);
> +    if (!(dst->list = HeapAlloc(GetProcessHeap(), 0, size)))
> +    {
> +        HeapFree(GetProcessHeap(), 0, dst);
> +        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);
> +            HeapFree(GetProcessHeap(), 0, dst);
> +            return SNMPAPI_ERROR;
> +        }
> +    }
> +    dst->len = src->len;
> +    return SNMPAPI_NOERROR;
> +}
>
>   


-- 
Rob Shearman




More information about the wine-devel mailing list