sset: New function sset_from_delimited_string().
authorBen Pfaff <blp@ovn.org>
Sat, 25 Jun 2016 04:30:39 +0000 (21:30 -0700)
committerBen Pfaff <blp@ovn.org>
Wed, 13 Jul 2016 20:43:37 +0000 (13:43 -0700)
This simplifies code in a couple of places.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-By: Ryan Moats <rmoats@us.ibm.com>
lib/sset.c
lib/sset.h
ovn/utilities/ovn-sbctl.c
ovsdb/replication.c

index 4fd3fae..be29cc7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, 2013, 2015 Nicira, Inc.
+ * Copyright (c) 2011, 2012, 2013, 2015, 2016 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -99,6 +99,25 @@ sset_moved(struct sset *set)
     hmap_moved(&set->map);
 }
 
+/* Initializes 'set' with substrings of 's' that are delimited by any of the
+ * characters in 'delimiters'.  For example,
+ *     sset_from_delimited_string(&set, "a b,c", " ,");
+ * initializes 'set' with three strings "a", "b", and "c". */
+void
+sset_from_delimited_string(struct sset *set, const char *s_,
+                           const char *delimiters)
+{
+    sset_init(set);
+
+    char *s = xstrdup(s_);
+    char *token, *save_ptr = NULL;
+    for (token = strtok_r(s, delimiters, &save_ptr); token != NULL;
+         token = strtok_r(NULL, delimiters, &save_ptr)) {
+        sset_add(set, token);
+    }
+    free(s);
+}
+
 /* Returns true if 'set' contains no strings, false if it contains at least one
  * string. */
 bool
index 9c2f703..c3b5e97 100644 (file)
@@ -43,6 +43,9 @@ void sset_clone(struct sset *, const struct sset *);
 void sset_swap(struct sset *, struct sset *);
 void sset_moved(struct sset *);
 
+void sset_from_delimited_string(struct sset *, const char *s,
+                                const char *delimiters);
+
 /* Count. */
 bool sset_is_empty(const struct sset *);
 size_t sset_count(const struct sset *);
index 37e4bce..2c68f79 100644 (file)
@@ -548,14 +548,8 @@ cmd_chassis_add(struct ctl_context *ctx)
     check_conflicts(sbctl_ctx, ch_name,
                     xasprintf("cannot create a chassis named %s", ch_name));
 
-    char *tokstr = xstrdup(encap_types);
-    char *token, *save_ptr = NULL;
-    struct sset encap_set = SSET_INITIALIZER(&encap_set);
-    for (token = strtok_r(tokstr, ",", &save_ptr); token != NULL;
-         token = strtok_r(NULL, ",", &save_ptr)) {
-        sset_add(&encap_set, token);
-    }
-    free(tokstr);
+    struct sset encap_set;
+    sset_from_delimited_string(&encap_set, encap_types, ",");
 
     size_t n_encaps = sset_count(&encap_set);
     struct sbrec_encap **encaps = xmalloc(n_encaps * sizeof *encaps);
index a267a3a..dd8f642 100644 (file)
@@ -121,19 +121,9 @@ set_remote_ovsdb_server(const char *remote_server)
 void
 set_tables_blacklist(const char *blacklist)
 {
-    char *save_ptr = NULL;
-    char *blacklist_item;
-
     replication_init();
-
     if (blacklist) {
-        char *t_blacklist = xstrdup(blacklist);
-        for (blacklist_item = strtok_r(t_blacklist, ",", &save_ptr);
-             blacklist_item != NULL;
-             blacklist_item = strtok_r(NULL, ",", &save_ptr)) {
-            sset_add(&tables_blacklist, blacklist_item);
-        }
-        free(t_blacklist);
+        sset_from_delimited_string(&tables_blacklist, blacklist, ",");
     }
 }