-/* Copyright (c) 2009, 2010 Nicira Networks
+/* Copyright (c) 2009, 2010, 2011 Nicira Networks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
|| (name && strcmp(json->u.array.elems[0]->u.string, name))
|| json->u.array.elems[1]->type != value_type)
{
+ *value = NULL;
return ovsdb_syntax_error(json, NULL, "expected [\"%s\", <%s>]", name,
json_type_to_string(value_type));
}
}
}
+/* Appends 'atom' (which has the given 'type') to 'out', in a bare string
+ * format that cannot be parsed uniformly back into a datum but is easier for
+ * shell scripts, etc., to deal with. */
+void
+ovsdb_atom_to_bare(const union ovsdb_atom *atom, enum ovsdb_atomic_type type,
+ struct ds *out)
+{
+ if (type == OVSDB_TYPE_STRING) {
+ ds_put_cstr(out, atom->string);
+ } else {
+ ovsdb_atom_to_string(atom, type, out);
+ }
+}
+
static struct ovsdb_error *
check_string_constraints(const char *s,
const struct ovsdb_string_constraints *c)
union ovsdb_atom key, value;
if (ovsdb_token_is_delim(*p)) {
+ char *type_str = ovsdb_type_to_english(type);
error = xasprintf("%s: unexpected \"%c\" parsing %s",
- s, *p, ovsdb_type_to_english(type));
+ s, *p, type_str);
+ free(type_str);
goto error;
}
}
}
+/* Appends to 'out' the 'datum' (with the given 'type') in a bare string format
+ * that cannot be parsed uniformly back into a datum but is easier for shell
+ * scripts, etc., to deal with. */
+void
+ovsdb_datum_to_bare(const struct ovsdb_datum *datum,
+ const struct ovsdb_type *type, struct ds *out)
+{
+ bool is_map = ovsdb_type_is_map(type);
+ size_t i;
+
+ for (i = 0; i < datum->n; i++) {
+ if (i > 0) {
+ ds_put_cstr(out, " ");
+ }
+
+ ovsdb_atom_to_bare(&datum->keys[i], type->key.type, out);
+ if (is_map) {
+ ds_put_char(out, '=');
+ ovsdb_atom_to_bare(&datum->values[i], type->value.type, out);
+ }
+ }
+}
+
/* Initializes 'datum' as a string-to-string map whose contents are taken from
* 'sh'. Destroys 'sh'. */
void