This simplifies code in a couple of places. Signed-off-by: Ben Pfaff <b...@ovn.org> --- v1->v2: Fix compile errors.
lib/sset.c | 21 ++++++++++++++++++++- lib/sset.h | 3 +++ ovn/utilities/ovn-sbctl.c | 10 ++-------- ovsdb/replication.c | 12 +----------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/lib/sset.c b/lib/sset.c index 4fd3fae..be29cc7 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 9c2f703..c3b5e97 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 c0ee518..40e1797 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 1fa0f25..aa6b9e2 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, ","); } } -- 2.1.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev