const char *word;
int keyword_argc;
const char **keyword_argv;
- enum matcher_rv rv;
+ enum matcher_rv rv = MATCHER_OK;
keyword_mask = 0;
while (1)
{
struct cmd_matcher matcher;
unsigned int token_index;
- enum matcher_rv rv;
+ enum matcher_rv rv = MATCHER_OK;
cmd_matcher_init(&matcher, cmd_element, filter,
vline, index, match_type, match);
struct distribute *dist;
/* temporary reference */
- key.ifname = (char *)ifname;
+ key.ifname = XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname);
dist = hash_lookup (disthash, &key);
-
+ XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
+
return dist;
}
distribute_get (const char *ifname)
{
struct distribute key;
+ struct distribute *ret;
/* temporary reference */
- key.ifname = (char *)ifname;
+ key.ifname = XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname);
- return hash_get (disthash, &key, (void * (*) (void *))distribute_hash_alloc);
+ ret = hash_get (disthash, &key, (void * (*) (void *))distribute_hash_alloc);
+
+ XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
+ return ret;
}
static unsigned int
/* Allocate a new hash. */
struct hash *
hash_create_size (unsigned int size, unsigned int (*hash_key) (void *),
- int (*hash_cmp) (const void *, const void *))
+ int (*hash_cmp) (const void *, const void *))
{
struct hash *hash;
extern struct hash *hash_create (unsigned int (*) (void *),
int (*) (const void *, const void *));
extern struct hash *hash_create_size (unsigned int, unsigned int (*) (void *),
- int (*) (const void *, const void *));
+ int (*) (const void *, const void *));
extern void *hash_get (struct hash *, void *, void * (*) (void *));
extern void *hash_alloc_intern (void *);
if_lookup_prefix (struct prefix *prefix)
{
struct listnode *node;
- struct prefix addr;
- int bestlen = 0;
struct listnode *cnode;
struct interface *ifp;
struct connected *c;
static void
if_dump (const struct interface *ifp)
{
- struct listnode *node;
- struct connected *c;
-
- for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, c))
zlog_info ("Interface %s index %d metric %d mtu %d "
#ifdef HAVE_IPV6
"mtu6 %d "
struct if_rmap *if_rmap;
/* temporary copy */
- key.ifname = (char *)ifname;
+ key.ifname = XSTRDUP (MTYPE_IF_RMAP_NAME, ifname);
if_rmap = hash_lookup (ifrmaphash, &key);
+ XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
return if_rmap;
}
static void *
if_rmap_hash_alloc (void *arg)
{
- struct if_rmap *ifarg = arg;
+ struct if_rmap *ifarg = (struct if_rmap *)arg;
struct if_rmap *if_rmap;
if_rmap = if_rmap_new ();
if_rmap_get (const char *ifname)
{
struct if_rmap key;
+ struct if_rmap *ret;
/* temporary copy */
- key.ifname = (char *)ifname;
+ key.ifname = XSTRDUP (MTYPE_IF_RMAP_NAME, ifname);
- return (struct if_rmap *) hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
+ ret = hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
+ if (key.ifname)
+ XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
+
+ return ret;
}
static unsigned int
* the input key.
*/
u_int32_t
-jhash (void *key, u_int32_t length, u_int32_t initval)
+jhash (const void *key, u_int32_t length, u_int32_t initval)
{
u_int32_t a, b, c, len;
- u_int8_t *k = key;
+ const u_int8_t *k = key;
len = length;
a = b = JHASH_GOLDEN_RATIO;
* of bytes. No alignment or length assumptions are made about
* the input key.
*/
-extern u_int32_t jhash(void *key, u_int32_t length, u_int32_t initval);
+extern u_int32_t jhash(const void *key, u_int32_t length, u_int32_t initval);
/* A special optimized version that handles 1 or more of u_int32_ts.
* The length parameter here is the number of u_int32_ts in the key.
#define OSPF_LSA_MAXAGE_DIFF 900
#define OSPF_LS_INFINITY 0xffffff
#define OSPF_DEFAULT_DESTINATION 0x00000000 /* 0.0.0.0 */
-#define OSPF_INITIAL_SEQUENCE_NUMBER 0x80000001
-#define OSPF_MAX_SEQUENCE_NUMBER 0x7fffffff
+#define OSPF_INITIAL_SEQUENCE_NUMBER 0x80000001U
+#define OSPF_MAX_SEQUENCE_NUMBER 0x7fffffffU
/* OSPF Interface Types */
#define OSPF_IFTYPE_NONE 0
* pass */
MD5Update(&context, k_ipad, 64); /* start with inner pad */
MD5Update(&context, text, text_len); /* then text of datagram */
- MD5Final(digest, &context); /* finish up 1st pass */
+ MD5Final((uint8_t *)digest, &context); /* finish up 1st pass */
/*
* perform outer MD5
*/
MD5Update(&context, k_opad, 64); /* start with outer pad */
MD5Update(&context, digest, 16); /* then results of 1st
* hash */
- MD5Final(digest, &context); /* finish up 2nd pass */
+ MD5Final((uint8_t *)digest, &context); /* finish up 2nd pass */
}
* the delete hook function. Don't invoke delete_hook
* again in this routine.
*/
-void
+static void
route_map_free_map (struct route_map *map)
{
struct route_map_list *list;
static int
route_map_rmap_hash_cmp (const void *p1, const void *p2)
{
- return (strcmp((char *)p1, (char *)p2) == 0);
+ return (strcmp((const char *)p1, (const char *)p2) == 0);
}
static int
route_map_dep_hash_cmp (const void *p1, const void *p2)
{
- return (strcmp (((struct route_map_dep *)p1)->dep_name, (char *)p2) == 0);
-}
-
-static void
-route_map_rmap_free(struct hash_backet *backet, void *arg)
-{
- char *rmap_name = (char *)backet->data;
-
- if (rmap_name)
- XFREE(MTYPE_ROUTE_MAP_NAME, rmap_name);
-}
-
-static void
-route_map_dep_hash_free (struct hash_backet *backet, void *arg)
-{
- struct route_map_dep *dep = (struct route_map_dep *)backet->data;
-
- if (!dep)
- return;
-
- if (dep->dep_rmap_hash)
- hash_iterate (dep->dep_rmap_hash, route_map_rmap_free, (void *)NULL);
-
- hash_free(dep->dep_rmap_hash);
- XFREE(MTYPE_ROUTE_MAP_NAME, dep->dep_name);
- XFREE(MTYPE_ROUTE_MAP_DEP, dep);
+ return (strcmp (((const struct route_map_dep *)p1)->dep_name, (const char *)p2) == 0);
}
static void
static void *
route_map_name_hash_alloc(void *p)
{
- return((void *)XSTRDUP(MTYPE_ROUTE_MAP_NAME, (char *)p));
+ return((void *)XSTRDUP(MTYPE_ROUTE_MAP_NAME, (const char *)p));
}
static unsigned int
{
struct route_map_dep *dep;
char *ret_map_name;
+ char *dname, *rname;
+ int ret = 0;
+
+ dname = XSTRDUP(MTYPE_ROUTE_MAP_NAME, dep_name);
+ rname = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_name);
switch (type)
{
if (rmap_debug)
zlog_debug("%s: Adding dependency for %s in %s", __FUNCTION__,
dep_name, rmap_name);
- dep = (struct route_map_dep *) hash_get (dephash, (void *)dep_name,
+ dep = (struct route_map_dep *) hash_get (dephash, dname,
route_map_dep_hash_alloc);
- if (!dep)
- return -1;
+ if (!dep) {
+ ret = -1;
+ goto out;
+ }
if (!dep->this_hash)
dep->this_hash = dephash;
- hash_get(dep->dep_rmap_hash, rmap_name, route_map_name_hash_alloc);
+ hash_get(dep->dep_rmap_hash, rname, route_map_name_hash_alloc);
break;
case RMAP_EVENT_PLIST_DELETED:
case RMAP_EVENT_CLIST_DELETED:
if (rmap_debug)
zlog_debug("%s: Deleting dependency for %s in %s", __FUNCTION__,
dep_name, rmap_name);
- dep = (struct route_map_dep *) hash_get (dephash, (void *)dep_name,
- NULL);
- if (!dep)
- return 0;
- ret_map_name = (char *)hash_release(dep->dep_rmap_hash, (void *)rmap_name);
+ dep = (struct route_map_dep *) hash_get (dephash, dname, NULL);
+ if (!dep) {
+ goto out;
+ }
+
+ ret_map_name = (char *)hash_release(dep->dep_rmap_hash, rname);
if (ret_map_name)
XFREE(MTYPE_ROUTE_MAP_NAME, ret_map_name);
if (!dep->dep_rmap_hash->count)
{
- dep = hash_release(dephash, (void *)dep_name);
+ dep = hash_release(dephash, dname);
hash_free(dep->dep_rmap_hash);
XFREE(MTYPE_ROUTE_MAP_NAME, dep->dep_name);
XFREE(MTYPE_ROUTE_MAP_DEP, dep);
if (dep)
{
if (rmap_debug)
- hash_iterate (dep->dep_rmap_hash, route_map_print_dependency, (void *)dep_name);
+ hash_iterate (dep->dep_rmap_hash, route_map_print_dependency, dname);
}
- return 0;
+
+ out:
+ XFREE(MTYPE_ROUTE_MAP_NAME, rname);
+ XFREE(MTYPE_ROUTE_MAP_NAME, dname);
+ return ret;
}
static struct hash *
{
struct route_map_dep *dep;
struct hash *upd8_hash;
+ char *name;
if (!affected_name)
return;
+ name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, affected_name);
+
if ((upd8_hash = route_map_get_dep_hash(event)) == NULL)
return;
- dep = (struct route_map_dep *)hash_get (upd8_hash, (void *)affected_name,
+ dep = (struct route_map_dep *)hash_get (upd8_hash, name,
NULL);
if (dep)
{
hash_iterate (dep->dep_rmap_hash, route_map_process_dependency, (void *)event);
}
+
+ XFREE (MTYPE_ROUTE_MAP_NAME, name);
}
/* VTY related functions. */
#ifndef _ZEBRA_ROUTEMAP_H
#define _ZEBRA_ROUTEMAP_H
+#include "prefix.h"
+
/* Route map's type. */
enum route_map_type
{
struct prefix *p)
{
struct route_node *node, *tmp_node;
- u_char prefixlen;
int cmp;
- prefixlen = p->prefixlen;
-
node = table->top;
while (node)
}
/* Trim blankspace and "()"s */
-void
+static void
strip_funcname (char *dest, const char *funcname)
{
char buff[FUNCNAME_LEN];
/* Async-signal-safe version of vty_log for fixed strings. */
void
-vty_log_fixed (const char *buf, size_t len)
+vty_log_fixed (char *buf, size_t len)
{
unsigned int i;
struct iovec iov[2];
+ char crlf[4] = "\r\n";
/* vty may not have been initialised */
if (!vtyvec)
iov[0].iov_base = (void *)buf;
iov[0].iov_len = len;
- iov[1].iov_base = (void *)"\r\n";
+ iov[1].iov_base = crlf;
iov[1].iov_len = 2;
for (i = 0; i < vector_active (vtyvec); i++)
/* Send a fixed-size message to all vty terminal monitors; this should be
an async-signal-safe function. */
-extern void vty_log_fixed (const char *buf, size_t len);
+extern void vty_log_fixed (char *buf, size_t len);
#endif /* _ZEBRA_VTY_H */
#include "log.h"
/* master list of work_queues */
-static struct list work_queues;
+static struct list _work_queues;
+/* pointer primarly to avid an otherwise harmless warning on
+ * ALL_LIST_ELEMENTS_RO
+ */
+static struct list *work_queues = &_work_queues;
#define WORK_QUEUE_MIN_GRANULARITY 1
new->items->del = (void (*)(void *)) work_queue_item_free;
- listnode_add (&work_queues, new);
+ listnode_add (work_queues, new);
new->cycles.granularity = WORK_QUEUE_MIN_GRANULARITY;
/* list_delete frees items via callback */
list_delete (wq->items);
- listnode_delete (&work_queues, wq);
+ listnode_delete (work_queues, wq);
XFREE (MTYPE_WORK_QUEUE_NAME, wq->name);
XFREE (MTYPE_WORK_QUEUE, wq);
"Name",
VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS_RO ((&work_queues), node, wq))
+ for (ALL_LIST_ELEMENTS_RO (work_queues, node, wq))
{
vty_out (vty,"%c %8d %5d %8ld %8ld %7d %6d %8ld %6u %s%s",
(CHECK_FLAG (wq->flags, WQ_UNPLUGGED) ? ' ' : 'P'),
u_short *id = NULL;
if (!red->instances)
- return 0;
+ return;
for (ALL_LIST_ELEMENTS_RO (red->instances, node, id))
if (*id == instance)