diff options
author | Ben Pfaff <blp@ovn.org> | 2016-06-24 21:30:39 -0700 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2016-07-13 13:43:37 -0700 |
commit | 63a10e1e4c48c314f002112f45e4a03b0db2357c (patch) | |
tree | 12e78a12fa9e4839afaa4543634c2b177fc561c2 | |
parent | 6026f53491068ac4d446bbc70ecbea3bb22b70fa (diff) | |
download | openvswitch-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.c | 21 | ||||
-rw-r--r-- | lib/sset.h | 3 | ||||
-rw-r--r-- | ovn/utilities/ovn-sbctl.c | 10 | ||||
-rw-r--r-- | ovsdb/replication.c | 12 |
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, ","); } } |