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