Skip to content

Commit

Permalink
ovsdb: Add functions to clone schemas.
Browse files Browse the repository at this point in the history
These will be used by an upcoming commit.
  • Loading branch information
blp committed Feb 15, 2010
1 parent e512548 commit 58985e0
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 2 deletions.
10 changes: 10 additions & 0 deletions ovsdb/column.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ ovsdb_column_create(const char *name, const char *comment,
bool mutable, bool persistent,
const struct ovsdb_type *type)
{
/* Doesn't set the new column's 'index': the caller must do that. */
struct ovsdb_column *column;

column = xzalloc(sizeof *column);
Expand All @@ -43,6 +44,15 @@ ovsdb_column_create(const char *name, const char *comment,
return column;
}

struct ovsdb_column *
ovsdb_column_clone(const struct ovsdb_column *old)
{
/* Doesn't copy the column's 'index': the caller must do that. */
return ovsdb_column_create(old->name, old->comment,
old->mutable, old->persistent,
&old->type);
}

void
ovsdb_column_destroy(struct ovsdb_column *column)
{
Expand Down
3 changes: 2 additions & 1 deletion ovsdb/column.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2009 Nicira Networks
/* Copyright (c) 2009, 2010 Nicira Networks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -47,6 +47,7 @@ enum {
struct ovsdb_column *ovsdb_column_create(
const char *name, const char *comment, bool mutable, bool persistent,
const struct ovsdb_type *);
struct ovsdb_column *ovsdb_column_clone(const struct ovsdb_column *);
void ovsdb_column_destroy(struct ovsdb_column *);

struct ovsdb_error *ovsdb_column_from_json(const struct json *,
Expand Down
16 changes: 16 additions & 0 deletions ovsdb/ovsdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@ ovsdb_schema_create(const char *name, const char *comment)
return schema;
}

struct ovsdb_schema *
ovsdb_schema_clone(const struct ovsdb_schema *old)
{
struct ovsdb_schema *new;
struct shash_node *node;

new = ovsdb_schema_create(old->name, old->comment);
SHASH_FOR_EACH (node, &old->tables) {
const struct ovsdb_table_schema *ts = node->data;

shash_add(&new->tables, node->name, ovsdb_table_schema_clone(ts));
}
return new;
}


void
ovsdb_schema_destroy(struct ovsdb_schema *schema)
{
Expand Down
3 changes: 2 additions & 1 deletion ovsdb/ovsdb.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2009 Nicira Networks
/* Copyright (c) 2009, 2010 Nicira Networks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -35,6 +35,7 @@ struct ovsdb_schema {

struct ovsdb_schema *ovsdb_schema_create(const char *name,
const char *comment);
struct ovsdb_schema *ovsdb_schema_clone(const struct ovsdb_schema *);
void ovsdb_schema_destroy(struct ovsdb_schema *);

struct ovsdb_error *ovsdb_schema_from_file(const char *file_name,
Expand Down
20 changes: 20 additions & 0 deletions ovsdb/table.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,26 @@ ovsdb_table_schema_create(const char *name, const char *comment, bool mutable)
return ts;
}

struct ovsdb_table_schema *
ovsdb_table_schema_clone(const struct ovsdb_table_schema *old)
{
struct ovsdb_table_schema *new;
struct shash_node *node;

new = ovsdb_table_schema_create(old->name, old->comment, old->mutable);
SHASH_FOR_EACH (node, &old->columns) {
const struct ovsdb_column *column = node->data;

if (column->name[0] == '_') {
/* Added automatically by ovsdb_table_schema_create(). */
continue;
}

add_column(new, ovsdb_column_clone(column));
}
return new;
}

void
ovsdb_table_schema_destroy(struct ovsdb_table_schema *ts)
{
Expand Down
2 changes: 2 additions & 0 deletions ovsdb/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ struct ovsdb_table_schema {
struct ovsdb_table_schema *ovsdb_table_schema_create(const char *name,
const char *comment,
bool mutable);
struct ovsdb_table_schema *ovsdb_table_schema_clone(
const struct ovsdb_table_schema *);
void ovsdb_table_schema_destroy(struct ovsdb_table_schema *);

struct ovsdb_error *ovsdb_table_schema_from_json(const struct json *,
Expand Down

0 comments on commit 58985e0

Please sign in to comment.