summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2016-06-24 21:30:39 -0700
committerBen Pfaff <blp@ovn.org>2016-07-13 13:43:37 -0700
commit63a10e1e4c48c314f002112f45e4a03b0db2357c (patch)
tree12e78a12fa9e4839afaa4543634c2b177fc561c2
parent6026f53491068ac4d446bbc70ecbea3bb22b70fa (diff)
downloadopenvswitch-63a10e1e4c48c314f002112f45e4a03b0db2357c.tar.gz
sset: New function sset_from_delimited_string().
This simplifies code in a couple of places. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-By: Ryan Moats <rmoats@us.ibm.com>
-rw-r--r--lib/sset.c21
-rw-r--r--lib/sset.h3
-rw-r--r--ovn/utilities/ovn-sbctl.c10
-rw-r--r--ovsdb/replication.c12
4 files changed, 26 insertions, 20 deletions
diff --git a/lib/sset.c b/lib/sset.c
index 4fd3fae07..be29cc71e 100644
--- a/lib/sset.c
+++ b/lib/sset.c
@@ -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
diff --git a/lib/sset.h b/lib/sset.h
index 9c2f70336..c3b5e971d 100644
--- a/lib/sset.h
+++ b/lib/sset.h
@@ -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 *);
diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c
index 37e4bce29..2c68f795b 100644
--- a/ovn/utilities/ovn-sbctl.c
+++ b/ovn/utilities/ovn-sbctl.c
@@ -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);
diff --git a/ovsdb/replication.c b/ovsdb/replication.c
index a267a3a00..dd8f64246 100644
--- a/ovsdb/replication.c
+++ b/ovsdb/replication.c
@@ -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, ",");
}
}