Any ovsdb programs that accepts a single schema file name will be extended to accept multiple file names. This patch implements the parsing logic for future patches.
Signed-off-by: Andy Zhou <az...@nicira.com> --- ovsdb/ovsdb.c | 38 ++++++++++++++++++++++++++++++++++++++ ovsdb/ovsdb.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c index 5929306..5305360 100644 --- a/ovsdb/ovsdb.c +++ b/ovsdb/ovsdb.c @@ -24,6 +24,7 @@ #include "ovsdb-parser.h" #include "ovsdb-types.h" #include "simap.h" +#include "sset.h" #include "table.h" #include "transaction.h" @@ -673,3 +674,40 @@ error: return err; } + +/* + * Parse schema file names from a string. + * + * A leading comma indicates the default schema name. + * + * Duplicated filenames will be ignored. */ +void +ovsdb_parse_schema_file_names(const char *file_names, struct sset *name_set, + const char *default_schema) +{ + const char *delimiter=", \t\r\n"; + const char *filename; + char *saveptr; + char *fns; + + if (!file_names) { + sset_add(name_set, default_schema); + return; + } + + if (*file_names == ',') { + sset_add(name_set, default_schema); + } + + fns = xstrdup(file_names); + filename = strtok_r(fns, delimiter, &saveptr); + if (!filename) { + filename = default_schema; + } + + while(filename) { + sset_add(name_set, filename); + filename = strtok_r(NULL, delimiter, &saveptr); + } + free(fns); +} diff --git a/ovsdb/ovsdb.h b/ovsdb/ovsdb.h index 2e7f7e0..b61b6ba 100644 --- a/ovsdb/ovsdb.h +++ b/ovsdb/ovsdb.h @@ -56,6 +56,8 @@ struct shash *ovsdb_schemas_clone(const struct shash *schemas); struct ovsdb_error *ovsdb_schemas_from_files(const struct sset *files, struct shash** ) OVS_WARN_UNUSED_RESULT; +void ovsdb_parse_schema_file_names(const char *file_names, struct sset *names, + const char *default_schema); void ovsdb_schemas_destroy(struct shash *schemas); struct json *ovsdb_schemas_to_json(const struct shash *schemas) OVS_WARN_UNUSED_RESULT; -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev