Hans Leidekker : snmpapi: Implement SnmpUtilVarBindCpy.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jan 15 07:43:14 CST 2007
Module: wine
Branch: master
Commit: 661218267a59416d093eef28435edfc54b56b465
URL: http://source.winehq.org/git/wine.git/?a=commit;h=661218267a59416d093eef28435edfc54b56b465
Author: Hans Leidekker <hans at it.vu.nl>
Date: Sun Jan 14 19:20:38 2007 +0100
snmpapi: Implement SnmpUtilVarBindCpy.
---
dlls/snmpapi/main.c | 70 +++++++++++++++++++++++++++++++++++++++++++++
dlls/snmpapi/snmpapi.spec | 2 +-
2 files changed, 71 insertions(+), 1 deletions(-)
diff --git a/dlls/snmpapi/main.c b/dlls/snmpapi/main.c
index 5c8c8e8..fea3d86 100644
--- a/dlls/snmpapi/main.c
+++ b/dlls/snmpapi/main.c
@@ -2,6 +2,7 @@
* Stub implementation of SNMPAPI.DLL
*
* Copyright 2002 Patrik Stridvall
+ * Copyright 2007 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -101,6 +102,75 @@ void WINAPI SnmpUtilOidFree(AsnObjectIde
HeapFree(GetProcessHeap(), 0, oid);
}
+INT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *dst, SnmpVarBind *src)
+{
+ unsigned int i, size;
+
+ TRACE("(%p, %p)\n", dst, src);
+
+ if (!(dst = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SnmpVarBind))))
+ return SNMPAPI_ERROR;
+
+ size = src->name.idLength * sizeof(UINT);
+ if (!(dst->name.ids = HeapAlloc(GetProcessHeap(), 0, size))) goto error;
+ for (i = 0; i < src->name.idLength; i++) dst->name.ids[i] = src->name.ids[i];
+ dst->name.idLength = src->name.idLength;
+
+ dst->value.asnType = src->value.asnType;
+ switch (dst->value.asnType)
+ {
+ case ASN_INTEGER32: dst->value.asnValue.number = src->value.asnValue.number; break;
+ case ASN_UNSIGNED32: dst->value.asnValue.unsigned32 = src->value.asnValue.unsigned32; break;
+ case ASN_COUNTER64: dst->value.asnValue.counter64 = src->value.asnValue.counter64; break;
+ case ASN_COUNTER32: dst->value.asnValue.counter = src->value.asnValue.counter; break;
+ case ASN_GAUGE32: dst->value.asnValue.gauge = src->value.asnValue.gauge; break;
+ case ASN_TIMETICKS: dst->value.asnValue.ticks = src->value.asnValue.ticks; break;
+
+ case ASN_OCTETSTRING:
+ case ASN_BITS:
+ case ASN_SEQUENCE:
+ case ASN_IPADDRESS:
+ case ASN_OPAQUE:
+ {
+ BYTE *stream;
+ UINT length = src->value.asnValue.string.length;
+
+ if (!(stream = HeapAlloc(GetProcessHeap(), 0, length)))
+ goto error;
+
+ dst->value.asnValue.string.stream = stream;
+ dst->value.asnValue.string.length = length;
+ dst->value.asnValue.string.dynamic = TRUE;
+ break;
+ }
+ case ASN_OBJECTIDENTIFIER:
+ {
+ UINT *ids, size = src->name.idLength * sizeof(UINT);
+
+ if (!(ids = HeapAlloc(GetProcessHeap(), 0, size)))
+ goto error;
+
+ dst->value.asnValue.object.ids = ids;
+ dst->value.asnValue.object.idLength = src->value.asnValue.object.idLength;
+
+ for (i = 0; i < dst->value.asnValue.object.idLength; i++)
+ dst->value.asnValue.object.ids[i] = src->value.asnValue.object.ids[i];
+ break;
+ }
+ default:
+ {
+ WARN("unknown ASN type: %d\n", src->value.asnType);
+ break;
+ }
+ }
+ return SNMPAPI_NOERROR;
+
+error:
+ HeapFree(GetProcessHeap(), 0, dst->name.ids);
+ HeapFree(GetProcessHeap(), 0, dst);
+ return SNMPAPI_ERROR;
+}
+
void WINAPI SnmpUtilVarBindFree(SnmpVarBind *vb)
{
TRACE("(%p)\n", vb);
diff --git a/dlls/snmpapi/snmpapi.spec b/dlls/snmpapi/snmpapi.spec
index 66e4cfb..615b895 100644
--- a/dlls/snmpapi/snmpapi.spec
+++ b/dlls/snmpapi/snmpapi.spec
@@ -39,7 +39,7 @@
@ stub SnmpUtilPrintOid
@ stub SnmpUtilStrlenW
@ stub SnmpUtilUnicodeToAnsi
-@ stub SnmpUtilVarBindCpy
+@ stdcall SnmpUtilVarBindCpy(ptr ptr)
@ stdcall SnmpUtilVarBindFree(ptr)
@ stub SnmpUtilVarBindListCpy
@ stub SnmpUtilVarBindListFree
More information about the wine-cvs
mailing list