/* * container_null.c * $Id$ * * see comments in header file. * */ #include #include #if HAVE_IO_H #include #endif #include #if HAVE_STDLIB_H #include #endif #if HAVE_MALLOC_H #include #endif #include #if HAVE_STRING_H #include #else #include #endif #include #include #include #include #include #include #include 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 */ /** @} */