From: Ben Pfaff Date: Wed, 22 Jul 2009 23:33:43 +0000 (-0700) Subject: shash: Introduce new macros SHASH_FOR_EACH, SHASH_FOR_EACH_SAFE. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd30311c8701d297f31f6dd92c628d1d9112911e;p=openvswitch shash: Introduce new macros SHASH_FOR_EACH, SHASH_FOR_EACH_SAFE. This is both more convenient and cleaner than using HMAP_FOR_EACH(_SAFE) directly. --- diff --git a/lib/shash.c b/lib/shash.c index f1785139..7bb8cd70 100644 --- a/lib/shash.c +++ b/lib/shash.c @@ -44,7 +44,7 @@ shash_clear(struct shash *sh) { struct shash_node *node, *next; - HMAP_FOR_EACH_SAFE (node, next, struct shash_node, node, &sh->map) { + SHASH_FOR_EACH_SAFE (node, next, sh) { hmap_remove(&sh->map, &node->node); free(node->name); free(node); diff --git a/lib/shash.h b/lib/shash.h index 72d83020..5794a20f 100644 --- a/lib/shash.h +++ b/lib/shash.h @@ -31,6 +31,13 @@ struct shash { #define SHASH_INITIALIZER(SHASH) { HMAP_INITIALIZER(&(SHASH)->map) } +#define SHASH_FOR_EACH(SHASH_NODE, SHASH) \ + HMAP_FOR_EACH (SHASH_NODE, struct shash_node, node, &(SHASH)->map) + +#define SHASH_FOR_EACH_SAFE(SHASH_NODE, NEXT, SHASH) \ + HMAP_FOR_EACH_SAFE (SHASH_NODE, NEXT, struct shash_node, node, \ + &(SHASH)->map) + void shash_init(struct shash *); void shash_destroy(struct shash *); void shash_clear(struct shash *); diff --git a/lib/unixctl.c b/lib/unixctl.c index 526c3fe3..17bd6cb5 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -82,7 +82,7 @@ unixctl_help(struct unixctl_conn *conn, const char *args UNUSED) struct shash_node *node; ds_put_cstr(&ds, "The available commands are:\n"); - HMAP_FOR_EACH (node, struct shash_node, node, &commands.map) { + SHASH_FOR_EACH (node, &commands) { ds_put_format(&ds, "\t%s\n", node->name); } unixctl_command_reply(conn, 214, ds_cstr(&ds));