summaryrefslogtreecommitdiff
path: root/snmplib/container_null.c
diff options
context:
space:
mode:
Diffstat (limited to 'snmplib/container_null.c')
-rw-r--r--snmplib/container_null.c191
1 files changed, 191 insertions, 0 deletions
diff --git a/snmplib/container_null.c b/snmplib/container_null.c
new file mode 100644
index 0000000..1f4870e
--- /dev/null
+++ b/snmplib/container_null.c
@@ -0,0 +1,191 @@
+/*
+ * container_null.c
+ * $Id$
+ *
+ * see comments in header file.
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-features.h>
+
+#if HAVE_IO_H
+#include <io.h>
+#endif
+#include <stdio.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <sys/types.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/types.h>
+#include <net-snmp/library/snmp_api.h>
+#include <net-snmp/library/container.h>
+#include <net-snmp/library/container_null.h>
+#include <net-snmp/library/tools.h>
+#include <net-snmp/library/snmp_assert.h>
+
+netsnmp_feature_child_of(container_null, container_types)
+
+/** @defgroup null_container null_container
+ * Helps you implement specialized containers.
+ * @ingroup container
+ *
+ * This is a simple container that doesn't actually contain anything.
+ * All the methods simply log a debug message and return.
+ *
+ * The original intent for this container is as a wrapper for a specialized
+ * container. Implement the functions you need, create a null_container,
+ * and override the default functions with your specialized versions.
+ *
+ * You can use the 'container:null' debug token to see what functions are
+ * being called, to help determine if you need to implement them.
+ *
+ * @{
+ */
+
+#ifndef NETSNMP_FEATURE_REMOVE_CONTAINER_NULL
+/**********************************************************************
+ *
+ * container
+ *
+ */
+static void *
+_null_find(netsnmp_container *container, const void *data)
+{
+ DEBUGMSGTL(("container:null:find","in\n"));
+ return NULL;
+}
+
+static void *
+_null_find_next(netsnmp_container *container, const void *data)
+{
+ DEBUGMSGTL(("container:null:find_next","in\n"));
+ return NULL;
+}
+
+static int
+_null_insert(netsnmp_container *container, const void *data)
+{
+ DEBUGMSGTL(("container:null:insert","in\n"));
+ return 0;
+}
+
+static int
+_null_remove(netsnmp_container *container, const void *data)
+{
+ DEBUGMSGTL(("container:null:remove","in\n"));
+ return 0;
+}
+
+static int
+_null_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("container:null:free","in\n"));
+ free(container);
+ return 0;
+}
+
+static int
+_null_init(netsnmp_container *container)
+{
+ DEBUGMSGTL(("container:null:","in\n"));
+ return 0;
+}
+
+static size_t
+_null_size(netsnmp_container *container)
+{
+ DEBUGMSGTL(("container:null:size","in\n"));
+ return 0;
+}
+
+static void
+_null_for_each(netsnmp_container *container, netsnmp_container_obj_func *f,
+ void *context)
+{
+ DEBUGMSGTL(("container:null:for_each","in\n"));
+}
+
+static netsnmp_void_array *
+_null_get_subset(netsnmp_container *container, void *data)
+{
+ DEBUGMSGTL(("container:null:get_subset","in\n"));
+ return NULL;
+}
+
+static void
+_null_clear(netsnmp_container *container, netsnmp_container_obj_func *f,
+ void *context)
+{
+ DEBUGMSGTL(("container:null:clear","in\n"));
+}
+
+/**********************************************************************
+ *
+ * factory
+ *
+ */
+
+netsnmp_container *
+netsnmp_container_get_null(void)
+{
+ /*
+ * allocate memory
+ */
+ netsnmp_container *c;
+ DEBUGMSGTL(("container:null:get_null","in\n"));
+ c = SNMP_MALLOC_TYPEDEF(netsnmp_container);
+ if (NULL==c) {
+ snmp_log(LOG_ERR, "couldn't allocate memory\n");
+ return NULL;
+ }
+
+ c->container_data = NULL;
+
+ c->get_size = _null_size;
+ c->init = _null_init;
+ c->cfree = _null_free;
+ c->insert = _null_insert;
+ c->remove = _null_remove;
+ c->find = _null_find;
+ c->find_next = _null_find_next;
+ c->get_subset = _null_get_subset;
+ c->get_iterator = NULL; /* _null_iterator; */
+ c->for_each = _null_for_each;
+ c->clear = _null_clear;
+
+ return c;
+}
+
+netsnmp_factory *
+netsnmp_container_get_null_factory(void)
+{
+ static netsnmp_factory f = { "null",
+ (netsnmp_factory_produce_f*)
+ netsnmp_container_get_null};
+
+ DEBUGMSGTL(("container:null:get_null_factory","in\n"));
+ return &f;
+}
+
+void
+netsnmp_container_null_init(void)
+{
+ netsnmp_container_register("null",
+ netsnmp_container_get_null_factory());
+}
+#else /* NETSNMP_FEATURE_REMOVE_CONTAINER_NULL */
+netsnmp_feature_unused(container_null);
+#endif /* NETSNMP_FEATURE_REMOVE_CONTAINER_NULL */
+/** @} */
+