These will acquire a caller in an upcoming commit.

Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/shash.c |   39 ++++++++++++++++++++++++++++++++++++++-
 lib/shash.h |    6 +++++-
 2 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/lib/shash.c b/lib/shash.c
index af917b3..29b3385 100644
--- a/lib/shash.c
+++ b/lib/shash.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
 #include "shash.h"
 #include <assert.h>
 #include "hash.h"
+#include "json.h"
 
 static struct shash_node *shash_find__(const struct shash *,
                                        const char *name, size_t name_len,
@@ -368,3 +369,39 @@ smap_add(struct shash *smap, const char *key, const char 
*value)
 {
     shash_add(smap, key, xstrdup(value));
 }
+
+/* Adds each of the key-value pairs from 'json' (which must be a JSON object
+ * whose values are strings) to 'smap'.
+ *
+ * The caller must have initialized 'smap'.
+ *
+ * The caller retains ownership of 'json' and everything in it. */
+void
+smap_from_json(struct shash *smap, const struct json *json)
+{
+    const struct shash_node *node;
+
+    SHASH_FOR_EACH (node, json_object(json)) {
+        const struct json *value = node->data;
+        smap_add(smap, node->name, json_string(value));
+    }
+}
+
+/* Returns a JSON object that maps from the keys in 'smap' to their values.
+ *
+ * The caller owns the returned value and must eventually json_destroy() it.
+ *
+ * The caller retains ownership of 'smap' and everything in it. */
+struct json *
+smap_to_json(const struct shash *smap)
+{
+    const struct shash_node *node;
+    struct json *json;
+
+    json = json_object_create();
+    SHASH_FOR_EACH (node, smap) {
+        const char *value = node->data;
+        json_object_put_string(json, node->name, value);
+    }
+    return json;
+}
diff --git a/lib/shash.h b/lib/shash.h
index decfcbc..cee8ce3 100644
--- a/lib/shash.h
+++ b/lib/shash.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,8 @@
 extern "C" {
 #endif
 
+struct json;
+
 struct shash_node {
     struct hmap_node node;
     char *name;
@@ -72,6 +74,8 @@ void smap_destroy(struct shash *);
 bool smap_equal(const struct shash *, const struct shash *);
 void smap_clone(struct shash *, const struct shash *);
 void smap_add(struct shash *, const char *key, const char *value);
+void smap_from_json(struct shash *, const struct json *);
+struct json *smap_to_json(const struct shash *);
 
 #ifdef  __cplusplus
 }
-- 
1.7.2.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to