summaryrefslogtreecommitdiff
path: root/import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch
diff options
context:
space:
mode:
Diffstat (limited to 'import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch')
-rw-r--r--import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch1264
1 files changed, 1264 insertions, 0 deletions
diff --git a/import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch b/import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch
new file mode 100644
index 0000000000..d6197588d6
--- /dev/null
+++ b/import-layers/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0001-Python3-compatibility-Convert-print-statements.patch
@@ -0,0 +1,1264 @@
+From c5c18f9c5f1b7217d43af43be9736c1762c7ebba Mon Sep 17 00:00:00 2001
+From: Jason Wessel <jason.wessel@windriver.com>
+Date: Thu, 29 Jun 2017 20:33:23 -0700
+Subject: [PATCH 1/8] Python3 compatibility: Convert print statements
+
+Commit d34a1cc02536f9a812517a71accec3fbd3c6c98b from
+https://github.com/openvswitch/ovs.git
+
+This patch fixes up all the print statements to work with python3 or
+python2.
+
+Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+---
+ build-aux/check-structs | 4 +-
+ build-aux/extract-ofp-actions | 68 +++---
+ build-aux/extract-ofp-errors | 2 +-
+ build-aux/extract-ofp-fields | 2 +-
+ build-aux/extract-ofp-msgs | 6 +-
+ ovsdb/ovsdb-doc | 6 +-
+ ovsdb/ovsdb-idlc.in | 523 +++++++++++++++++++++---------------------
+ 7 files changed, 306 insertions(+), 305 deletions(-)
+
+diff --git a/build-aux/check-structs b/build-aux/check-structs
+index f79f235..bae511f 100755
+--- a/build-aux/check-structs
++++ b/build-aux/check-structs
+@@ -211,7 +211,7 @@ def checkStructs():
+
+ if '--help' in sys.argv:
+ argv0 = os.path.basename(sys.argv[0])
+- print '''\
++ print('''\
+ %(argv0)s, for checking struct and struct member alignment
+ usage: %(argv0)s -Ipath HEADER [HEADER]...
+
+@@ -226,7 +226,7 @@ assertions using OFP_ASSERT.
+
+ This program is specialized for reading Open vSwitch's OpenFlow header
+ files. It will not work on arbitrary header files without extensions.\
+-''' % {"argv0": argv0}
++''' % {"argv0": argv0})
+ sys.exit(0)
+
+ global fileName
+diff --git a/build-aux/extract-ofp-actions b/build-aux/extract-ofp-actions
+index 0062ab8..874e6b4 100755
+--- a/build-aux/extract-ofp-actions
++++ b/build-aux/extract-ofp-actions
+@@ -67,7 +67,7 @@ def fatal(msg):
+
+ def usage():
+ argv0 = os.path.basename(sys.argv[0])
+- print ('''\
++ print('''\
+ %(argv0)s, for extracting OpenFlow action data
+ usage: %(argv0)s OFP_ACTIONS.C [--prototypes | --definitions]
+
+@@ -238,36 +238,36 @@ def extract_ofp_actions(fn, definitions):
+ if n_errors:
+ sys.exit(1)
+
+- print """\
++ print("""\
+ /* Generated automatically; do not modify! -*- buffer-read-only: t -*- */
+-"""
++""")
+
+ if definitions:
+- print "/* Verify that structs used as actions are reasonable sizes. */"
++ print("/* Verify that structs used as actions are reasonable sizes. */")
+ for s in sorted(arg_structs):
+- print "BUILD_ASSERT_DECL(sizeof(%s) %% OFP_ACTION_ALIGN == 0);" % s
++ print("BUILD_ASSERT_DECL(sizeof(%s) %% OFP_ACTION_ALIGN == 0);" % s)
+
+- print "\nstatic struct ofpact_raw_instance all_raw_instances[] = {"
++ print("\nstatic struct ofpact_raw_instance all_raw_instances[] = {")
+ for vendor in domain:
+ for type_ in domain[vendor]:
+ for version in domain[vendor][type_]:
+ d = domain[vendor][type_][version]
+- print " { { 0x%08x, %2d, 0x%02x }, " % (
+- vendor, type_, version)
+- print " %s," % d["enum"]
+- print " HMAP_NODE_NULL_INITIALIZER,"
+- print " HMAP_NODE_NULL_INITIALIZER,"
+- print " %s," % d["min_length"]
+- print " %s," % d["max_length"]
+- print " %s," % d["arg_ofs"]
+- print " %s," % d["arg_len"]
+- print " \"%s\"," % re.sub('_RAW[0-9]*', '', d["enum"], 1)
++ print(" { { 0x%08x, %2d, 0x%02x }, " % (
++ vendor, type_, version))
++ print(" %s," % d["enum"])
++ print(" HMAP_NODE_NULL_INITIALIZER,")
++ print(" HMAP_NODE_NULL_INITIALIZER,")
++ print(" %s," % d["min_length"])
++ print(" %s," % d["max_length"])
++ print(" %s," % d["arg_ofs"])
++ print(" %s," % d["arg_len"])
++ print(" \"%s\"," % re.sub('_RAW[0-9]*', '', d["enum"], 1))
+ if d["deprecation"]:
+- print " \"%s\"," % re.sub(r'(["\\])', r'\\\1', d["deprecation"])
++ print(" \"%s\"," % re.sub(r'(["\\])', r'\\\1', d["deprecation"]))
+ else:
+- print " NULL,"
+- print " },"
+- print "};";
++ print(" NULL,")
++ print(" },")
++ print("};")
+
+ for versions in enums.values():
+ need_ofp_version = False
+@@ -314,11 +314,11 @@ def extract_ofp_actions(fn, definitions):
+ decl += "}"
+ else:
+ decl += ";"
+- print decl
+- print
++ print(decl)
++ print("")
+
+ if definitions:
+- print """\
++ print("""\
+ static enum ofperr
+ ofpact_decode(const struct ofp_action_header *a, enum ofp_raw_action_type raw,
+ enum ofp_version version, uint64_t arg,
+@@ -326,14 +326,14 @@ ofpact_decode(const struct ofp_action_header *a, enum ofp_raw_action_type raw,
+ uint64_t *tlv_bitmap, struct ofpbuf *out)
+ {
+ switch (raw) {\
+-"""
++""")
+ for versions in enums.values():
+ enum = versions[0]["enum"]
+- print " case %s:" % enum
++ print(" case %s:" % enum)
+ base_argtype = versions[0]["base_argtype"]
+ arg_vl_mff_map = versions[0]["arg_vl_mff_map"]
+ if base_argtype == 'void':
+- print " return decode_%s(out);" % enum
++ print(" return decode_%s(out);" % enum)
+ else:
+ if base_argtype.startswith('struct'):
+ arg = "ALIGNED_CAST(const %s *, a)" % base_argtype
+@@ -344,16 +344,16 @@ ofpact_decode(const struct ofp_action_header *a, enum ofp_raw_action_type raw,
+ else:
+ arg = "arg"
+ if arg_vl_mff_map:
+- print " return decode_%s(%s, version, vl_mff_map, tlv_bitmap, out);" % (enum, arg)
++ print(" return decode_%s(%s, version, vl_mff_map, tlv_bitmap, out);" % (enum, arg))
+ else:
+- print " return decode_%s(%s, version, out);" % (enum, arg)
+- print
+- print """\
++ print(" return decode_%s(%s, version, out);" % (enum, arg))
++ print("")
++ print("""\
+ default:
+ OVS_NOT_REACHED();
+ }
+ }\
+-"""
++""")
+ else:
+ for versions in enums.values():
+ enum = versions[0]["enum"]
+@@ -368,15 +368,15 @@ ofpact_decode(const struct ofp_action_header *a, enum ofp_raw_action_type raw,
+ if arg_vl_mff_map:
+ prototype += 'const struct vl_mff_map *, uint64_t *, '
+ prototype += "struct ofpbuf *);"
+- print prototype
++ print(prototype)
+
+- print """
++ print("""
+ static enum ofperr ofpact_decode(const struct ofp_action_header *,
+ enum ofp_raw_action_type raw,
+ enum ofp_version version,
+ uint64_t arg, const struct vl_mff_map *vl_mff_map,
+ uint64_t *tlv_bitmap, struct ofpbuf *out);
+-"""
++""")
+
+ if __name__ == '__main__':
+ if '--help' in sys.argv:
+diff --git a/build-aux/extract-ofp-errors b/build-aux/extract-ofp-errors
+index 2312b76..336a240 100755
+--- a/build-aux/extract-ofp-errors
++++ b/build-aux/extract-ofp-errors
+@@ -426,7 +426,7 @@ static const struct ofperr_domain %s = {
+ vendor, type_, code = map[enum]
+ if code == None:
+ code = -1
+- print " { %#8x, %2d, %3d }, /* %s */" % (vendor, type_, code, enum)
++ print (" { %#8x, %2d, %3d }, /* %s */" % (vendor, type_, code, enum))
+ else:
+ print (" { -1, -1, -1 }, /* %s */" % enum)
+ print ("""\
+diff --git a/build-aux/extract-ofp-fields b/build-aux/extract-ofp-fields
+index 498b887..425a85f 100755
+--- a/build-aux/extract-ofp-fields
++++ b/build-aux/extract-ofp-fields
+@@ -728,7 +728,7 @@ def make_ovs_fields(meta_flow_h, meta_flow_xml):
+ ovs\-fields \- protocol header fields in OpenFlow and Open vSwitch
+ .
+ .PP
+-''') % version
++''' % version)
+
+ recursively_replace(doc, 'oxm_classes', make_oxm_classes_xml(document))
+
+diff --git a/build-aux/extract-ofp-msgs b/build-aux/extract-ofp-msgs
+index 1813638..a67e870 100755
+--- a/build-aux/extract-ofp-msgs
++++ b/build-aux/extract-ofp-msgs
+@@ -56,14 +56,14 @@ def fatal(msg):
+
+ def usage():
+ argv0 = os.path.basename(sys.argv[0])
+- print '''\
++ print('''\
+ %(argv0)s, for extracting OpenFlow message types from header files
+ usage: %(argv0)s INPUT OUTPUT
+ where INPUT is the name of the input header file
+ and OUTPUT is the output file name.
+ Despite OUTPUT, the output is written to stdout, and the OUTPUT argument
+ only controls #line directives in the output.\
+-''' % {"argv0": argv0}
++''' % {"argv0": argv0})
+ sys.exit(0)
+
+ def make_sizeof(s):
+@@ -378,5 +378,5 @@ if __name__ == '__main__':
+ line_number = 0
+
+ for line in extract_ofp_msgs(sys.argv[2]):
+- print line
++ print(line)
+
+diff --git a/ovsdb/ovsdb-doc b/ovsdb/ovsdb-doc
+index 5cf26ee..b34fb11 100755
+--- a/ovsdb/ovsdb-doc
++++ b/ovsdb/ovsdb-doc
+@@ -258,7 +258,7 @@ represent strong references; thin lines represent weak references.
+ return s
+
+ def usage():
+- print """\
++ print("""\
+ %(argv0)s: ovsdb schema documentation generator
+ Prints documentation for an OVSDB schema as an nroff-formatted manpage.
+ usage: %(argv0)s [OPTIONS] SCHEMA XML
+@@ -269,7 +269,7 @@ The following options are also available:
+ --er-diagram=DIAGRAM.PIC include E-R diagram from DIAGRAM.PIC
+ --version=VERSION use VERSION to display on document footer
+ -h, --help display this help message\
+-""" % {'argv0': argv0}
++""" % {'argv0': argv0})
+ sys.exit(0)
+
+ if __name__ == "__main__":
+@@ -304,7 +304,7 @@ if __name__ == "__main__":
+ for line in s.split("\n"):
+ line = line.strip()
+ if len(line):
+- print line
++ print(line)
+
+ except error.Error, e:
+ sys.stderr.write("%s: %s\n" % (argv0, e.msg))
+diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in
+index 721ab50..1064448 100755
+--- a/ovsdb/ovsdb-idlc.in
++++ b/ovsdb/ovsdb-idlc.in
+@@ -1,5 +1,6 @@
+ #! @PYTHON@
+
++from __future__ import print_function
+ import getopt
+ import os
+ import re
+@@ -123,7 +124,7 @@ def sorted_columns(table):
+ def printCIDLHeader(schemaFile):
+ schema = parseSchema(schemaFile)
+ prefix = schema.idlPrefix
+- print '''\
++ print('''\
+ /* Generated automatically -- do not modify! -*- buffer-read-only: t -*- */
+
+ #ifndef %(prefix)sIDL_HEADER
+@@ -135,39 +136,39 @@ def printCIDLHeader(schemaFile):
+ #include "ovsdb-data.h"
+ #include "ovsdb-idl-provider.h"
+ #include "smap.h"
+-#include "uuid.h"''' % {'prefix': prefix.upper()}
++#include "uuid.h"''' % {'prefix': prefix.upper()})
+
+ for tableName, table in sorted(schema.tables.iteritems()):
+ structName = "%s%s" % (prefix, tableName.lower())
+
+- print " "
+- print "/* %s table. */" % tableName
+- print "struct %s {" % structName
+- print "\tstruct ovsdb_idl_row header_;"
++ print(" ")
++ print("/* %s table. */" % tableName)
++ print("struct %s {" % structName)
++ print("\tstruct ovsdb_idl_row header_;")
+ for columnName, column in sorted_columns(table):
+- print "\n\t/* %s column. */" % columnName
++ print("\n\t/* %s column. */" % columnName)
+ comment, members = cMembers(prefix, tableName,
+ columnName, column, False)
+ for member in members:
+- print "\t%(type)s%(name)s;%(comment)s" % member
+- print "};"
++ print("\t%(type)s%(name)s;%(comment)s" % member)
++ print("};")
+
+ # Column indexes.
+ printEnum("%s_column_id" % structName.lower(), ["%s_COL_%s" % (structName.upper(), columnName.upper())
+ for columnName, column in sorted_columns(table)]
+ + ["%s_N_COLUMNS" % structName.upper()])
+
+- print
++ print("")
+ for columnName in table.columns:
+- print "#define %(s)s_col_%(c)s (%(s)s_columns[%(S)s_COL_%(C)s])" % {
++ print("#define %(s)s_col_%(c)s (%(s)s_columns[%(S)s_COL_%(C)s])" % {
+ 's': structName,
+ 'S': structName.upper(),
+ 'c': columnName,
+- 'C': columnName.upper()}
++ 'C': columnName.upper()})
+
+- print "\nextern struct ovsdb_idl_column %s_columns[%s_N_COLUMNS];" % (structName, structName.upper())
++ print("\nextern struct ovsdb_idl_column %s_columns[%s_N_COLUMNS];" % (structName, structName.upper()))
+
+- print '''
++ print('''
+ const struct %(s)s *%(s)s_get_for_uuid(const struct ovsdb_idl *, const struct uuid *);
+ const struct %(s)s *%(s)s_first(const struct ovsdb_idl *);
+ const struct %(s)s *%(s)s_next(const struct %(s)s *);
+@@ -205,87 +206,87 @@ void %(s)s_init(struct %(s)s *);
+ void %(s)s_delete(const struct %(s)s *);
+ struct %(s)s *%(s)s_insert(struct ovsdb_idl_txn *);
+ bool %(s)s_is_updated(const struct %(s)s *, enum %(s)s_column_id);
+-''' % {'s': structName, 'S': structName.upper()}
++''' % {'s': structName, 'S': structName.upper()})
+
+ for columnName, column in sorted_columns(table):
+- print 'void %(s)s_verify_%(c)s(const struct %(s)s *);' % {'s': structName, 'c': columnName}
++ print('void %(s)s_verify_%(c)s(const struct %(s)s *);' % {'s': structName, 'c': columnName})
+
+- print
++ print("")
+ for columnName, column in sorted_columns(table):
+ if column.type.value:
+ valueParam = ', enum ovsdb_atomic_type value_type'
+ else:
+ valueParam = ''
+- print 'const struct ovsdb_datum *%(s)s_get_%(c)s(const struct %(s)s *, enum ovsdb_atomic_type key_type%(v)s);' % {
+- 's': structName, 'c': columnName, 'v': valueParam}
++ print('const struct ovsdb_datum *%(s)s_get_%(c)s(const struct %(s)s *, enum ovsdb_atomic_type key_type%(v)s);' % {
++ 's': structName, 'c': columnName, 'v': valueParam})
+
+- print
++ print("")
+ for columnName, column in sorted_columns(table):
+- print 'void %(s)s_set_%(c)s(const struct %(s)s *,' % {'s': structName, 'c': columnName},
++ print('void %(s)s_set_%(c)s(const struct %(s)s *,' % {'s': structName, 'c': columnName}, end=' ')
+ if column.type.is_smap():
+ args = ['const struct smap *']
+ else:
+ comment, members = cMembers(prefix, tableName, columnName,
+ column, True)
+ args = ['%(type)s%(name)s' % member for member in members]
+- print '%s);' % ', '.join(args)
++ print('%s);' % ', '.join(args))
+
+- print
++ print("")
+ for columnName, column in sorted_columns(table):
+ if column.type.is_map():
+- print 'void %(s)s_update_%(c)s_setkey(const struct %(s)s *, ' % {'s': structName, 'c': columnName},
+- print '%(coltype)s, %(valtype)s);' % {'coltype':column.type.key.to_const_c_type(prefix), 'valtype':column.type.value.to_const_c_type(prefix)}
+- print 'void %(s)s_update_%(c)s_delkey(const struct %(s)s *, ' % {'s': structName, 'c': columnName},
+- print '%(coltype)s);' % {'coltype':column.type.key.to_const_c_type(prefix)}
++ print('void %(s)s_update_%(c)s_setkey(const struct %(s)s *, ' % {'s': structName, 'c': columnName}, end=' ')
++ print('%(coltype)s, %(valtype)s);' % {'coltype':column.type.key.to_const_c_type(prefix), 'valtype':column.type.value.to_const_c_type(prefix)})
++ print('void %(s)s_update_%(c)s_delkey(const struct %(s)s *, ' % {'s': structName, 'c': columnName}, end=' ')
++ print('%(coltype)s);' % {'coltype':column.type.key.to_const_c_type(prefix)})
+ if column.type.is_set():
+- print 'void %(s)s_update_%(c)s_addvalue(const struct %(s)s *, ' % {'s': structName, 'c': columnName},
+- print '%(valtype)s);' % {'valtype':column.type.key.to_const_c_type(prefix)}
+- print 'void %(s)s_update_%(c)s_delvalue(const struct %(s)s *, ' % {'s': structName, 'c': columnName},
+- print '%(valtype)s);' % {'valtype':column.type.key.to_const_c_type(prefix)}
++ print('void %(s)s_update_%(c)s_addvalue(const struct %(s)s *, ' % {'s': structName, 'c': columnName}, end=' ')
++ print('%(valtype)s);' % {'valtype':column.type.key.to_const_c_type(prefix)})
++ print('void %(s)s_update_%(c)s_delvalue(const struct %(s)s *, ' % {'s': structName, 'c': columnName}, end=' ')
++ print('%(valtype)s);' % {'valtype':column.type.key.to_const_c_type(prefix)})
+
+- print 'void %(s)s_add_clause_%(c)s(struct ovsdb_idl_condition *, enum ovsdb_function function,' % {'s': structName, 'c': columnName},
++ print('void %(s)s_add_clause_%(c)s(struct ovsdb_idl_condition *, enum ovsdb_function function,' % {'s': structName, 'c': columnName}, end=' ')
+ if column.type.is_smap():
+ args = ['const struct smap *']
+ else:
+ comment, members = cMembers(prefix, tableName, columnName,
+ column, True, refTable=False)
+ args = ['%(type)s%(name)s' % member for member in members]
+- print '%s);' % ', '.join(args)
++ print('%s);' % ', '.join(args))
+
+- print 'void %(s)s_set_condition(struct ovsdb_idl *, struct ovsdb_idl_condition *);' % {'s': structName},
++ print('void %(s)s_set_condition(struct ovsdb_idl *, struct ovsdb_idl_condition *);' % {'s': structName})
+
+- print
++ print("")
+
+ # Table indexes.
+ printEnum("%stable_id" % prefix.lower(), ["%sTABLE_%s" % (prefix.upper(), tableName.upper()) for tableName in sorted(schema.tables)] + ["%sN_TABLES" % prefix.upper()])
+- print
++ print("")
+ for tableName in schema.tables:
+- print "#define %(p)stable_%(t)s (%(p)stable_classes[%(P)sTABLE_%(T)s])" % {
++ print("#define %(p)stable_%(t)s (%(p)stable_classes[%(P)sTABLE_%(T)s])" % {
+ 'p': prefix,
+ 'P': prefix.upper(),
+ 't': tableName.lower(),
+- 'T': tableName.upper()}
+- print "\nextern struct ovsdb_idl_table_class %stable_classes[%sN_TABLES];" % (prefix, prefix.upper())
++ 'T': tableName.upper()})
++ print("\nextern struct ovsdb_idl_table_class %stable_classes[%sN_TABLES];" % (prefix, prefix.upper()))
+
+- print "\nextern struct ovsdb_idl_class %sidl_class;" % prefix
++ print("\nextern struct ovsdb_idl_class %sidl_class;" % prefix)
+
+- print "\nconst char * %sget_db_version(void);" % prefix
+- print "\n#endif /* %(prefix)sIDL_HEADER */" % {'prefix': prefix.upper()}
++ print("\nconst char * %sget_db_version(void);" % prefix)
++ print("\n#endif /* %(prefix)sIDL_HEADER */" % {'prefix': prefix.upper()})
+
+ def printEnum(type, members):
+ if len(members) == 0:
+ return
+
+- print "\nenum %s {" % type
++ print("\nenum %s {" % type)
+ for member in members[:-1]:
+- print " %s," % member
+- print " %s" % members[-1]
+- print "};"
++ print(" %s," % member)
++ print(" %s" % members[-1])
++ print("};")
+
+ def printCIDLSource(schemaFile):
+ schema = parseSchema(schemaFile)
+ prefix = schema.idlPrefix
+- print '''\
++ print('''\
+ /* Generated automatically -- do not modify! -*- buffer-read-only: t -*- */
+
+ #include <config.h>
+@@ -296,33 +297,33 @@ def printCIDLSource(schemaFile):
+ #include "ovsdb-error.h"
+ #include "util.h"
+
+-''' % schema.idlHeader
++''' % schema.idlHeader)
+
+ # Cast functions.
+ for tableName, table in sorted(schema.tables.iteritems()):
+ structName = "%s%s" % (prefix, tableName.lower())
+- print '''
++ print('''
+ static struct %(s)s *
+ %(s)s_cast(const struct ovsdb_idl_row *row)
+ {
+ return row ? CONTAINER_OF(row, struct %(s)s, header_) : NULL;
+ }\
+-''' % {'s': structName}
++''' % {'s': structName})
+
+
+ for tableName, table in sorted(schema.tables.iteritems()):
+ structName = "%s%s" % (prefix, tableName.lower())
+- print " "
+- print "/* %s table. */" % (tableName)
++ print(" ")
++ print("/* %s table. */" % (tableName))
+
+ # Parse functions.
+ for columnName, column in sorted_columns(table):
+- print '''
++ print('''
+ static void
+ %(s)s_parse_%(c)s(struct ovsdb_idl_row *row_, const struct ovsdb_datum *datum)
+ {
+ struct %(s)s *row = %(s)s_cast(row_);''' % {'s': structName,
+- 'c': columnName}
++ 'c': columnName})
+ type = column.type
+ if type.value:
+ keyVar = "row->key_%s" % columnName
+@@ -332,89 +333,89 @@ static void
+ valueVar = None
+
+ if type.is_smap():
+- print " smap_init(&row->%s);" % columnName
+- print " for (size_t i = 0; i < datum->n; i++) {"
+- print " smap_add(&row->%s," % columnName
+- print " datum->keys[i].string,"
+- print " datum->values[i].string);"
+- print " }"
++ print(" smap_init(&row->%s);" % columnName)
++ print(" for (size_t i = 0; i < datum->n; i++) {")
++ print(" smap_add(&row->%s," % columnName)
++ print(" datum->keys[i].string,")
++ print(" datum->values[i].string);")
++ print(" }")
+ elif (type.n_min == 1 and type.n_max == 1) or type.is_optional_pointer():
+- print
+- print " if (datum->n >= 1) {"
++ print("")
++ print(" if (datum->n >= 1) {")
+ if not type.key.ref_table:
+- print " %s = datum->keys[0].%s;" % (keyVar, type.key.type.to_string())
++ print(" %s = datum->keys[0].%s;" % (keyVar, type.key.type.to_string()))
+ else:
+- print " %s = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->keys[0].uuid));" % (keyVar, prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower())
++ print(" %s = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->keys[0].uuid));" % (keyVar, prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower()))
+
+ if valueVar:
+ if not type.value.ref_table:
+- print " %s = datum->values[0].%s;" % (valueVar, type.value.type.to_string())
++ print(" %s = datum->values[0].%s;" % (valueVar, type.value.type.to_string()))
+ else:
+- print " %s = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->values[0].uuid));" % (valueVar, prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower())
+- print " } else {"
+- print " %s" % type.key.initCDefault(keyVar, type.n_min == 0)
++ print(" %s = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->values[0].uuid));" % (valueVar, prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower()))
++ print(" } else {")
++ print(" %s" % type.key.initCDefault(keyVar, type.n_min == 0))
+ if valueVar:
+- print " %s" % type.value.initCDefault(valueVar, type.n_min == 0)
+- print " }"
++ print(" %s" % type.value.initCDefault(valueVar, type.n_min == 0))
++ print(" }")
+ else:
+ if type.n_max != sys.maxint:
+- print " size_t n = MIN(%d, datum->n);" % type.n_max
++ print(" size_t n = MIN(%d, datum->n);" % type.n_max)
+ nMax = "n"
+ else:
+ nMax = "datum->n"
+- print " %s = NULL;" % keyVar
++ print(" %s = NULL;" % keyVar)
+ if valueVar:
+- print " %s = NULL;" % valueVar
+- print " row->n_%s = 0;" % columnName
+- print " for (size_t i = 0; i < %s; i++) {" % nMax
++ print(" %s = NULL;" % valueVar)
++ print(" row->n_%s = 0;" % columnName)
++ print(" for (size_t i = 0; i < %s; i++) {" % nMax)
+ if type.key.ref_table:
+- print """\
++ print("""\
+ struct %s%s *keyRow = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->keys[i].uuid));
+ if (!keyRow) {
+ continue;
+ }\
+-""" % (prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower())
++""" % (prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower(), prefix, type.key.ref_table.name.lower()))
+ keySrc = "keyRow"
+ else:
+ keySrc = "datum->keys[i].%s" % type.key.type.to_string()
+ if type.value and type.value.ref_table:
+- print """\
++ print("""\
+ struct %s%s *valueRow = %s%s_cast(ovsdb_idl_get_row_arc(row_, &%stable_%s, &datum->values[i].uuid));
+ if (!valueRow) {
+ continue;
+ }\
+-""" % (prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower())
++""" % (prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower(), prefix, type.value.ref_table.name.lower()))
+ valueSrc = "valueRow"
+ elif valueVar:
+ valueSrc = "datum->values[i].%s" % type.value.type.to_string()
+- print " if (!row->n_%s) {" % (columnName)
++ print(" if (!row->n_%s) {" % (columnName))
+
+- print " %s = xmalloc(%s * sizeof *%s);" % (
+- keyVar, nMax, keyVar)
++ print(" %s = xmalloc(%s * sizeof *%s);" % (
++ keyVar, nMax, keyVar))
+ if valueVar:
+- print " %s = xmalloc(%s * sizeof *%s);" % (
+- valueVar, nMax, valueVar)
+- print " }"
+- print " %s[row->n_%s] = %s;" % (keyVar, columnName, keySrc)
++ print(" %s = xmalloc(%s * sizeof *%s);" % (
++ valueVar, nMax, valueVar))
++ print(" }")
++ print(" %s[row->n_%s] = %s;" % (keyVar, columnName, keySrc))
+ if valueVar:
+- print " %s[row->n_%s] = %s;" % (valueVar, columnName, valueSrc)
+- print " row->n_%s++;" % columnName
+- print " }"
+- print "}"
++ print(" %s[row->n_%s] = %s;" % (valueVar, columnName, valueSrc))
++ print(" row->n_%s++;" % columnName)
++ print(" }")
++ print("}")
+
+ # Unparse functions.
+ for columnName, column in sorted_columns(table):
+ type = column.type
+ if type.is_smap() or (type.n_min != 1 or type.n_max != 1) and not type.is_optional_pointer():
+- print '''
++ print('''
+ static void
+ %(s)s_unparse_%(c)s(struct ovsdb_idl_row *row_)
+ {
+ struct %(s)s *row = %(s)s_cast(row_);''' % {'s': structName,
+- 'c': columnName}
++ 'c': columnName})
+
+ if type.is_smap():
+- print " smap_destroy(&row->%s);" % columnName
++ print(" smap_destroy(&row->%s);" % columnName)
+ else:
+ if type.value:
+ keyVar = "row->key_%s" % columnName
+@@ -422,45 +423,45 @@ static void
+ else:
+ keyVar = "row->%s" % columnName
+ valueVar = None
+- print " free(%s);" % keyVar
++ print(" free(%s);" % keyVar)
+ if valueVar:
+- print " free(%s);" % valueVar
+- print '}'
++ print(" free(%s);" % valueVar)
++ print('}')
+ else:
+- print '''
++ print('''
+ static void
+ %(s)s_unparse_%(c)s(struct ovsdb_idl_row *row OVS_UNUSED)
+ {
+ /* Nothing to do. */
+-}''' % {'s': structName, 'c': columnName}
++}''' % {'s': structName, 'c': columnName})
+
+ # Generic Row Initialization function.
+- print """
++ print("""
+ static void
+ %(s)s_init__(struct ovsdb_idl_row *row)
+ {
+ %(s)s_init(%(s)s_cast(row));
+-}""" % {'s': structName}
++}""" % {'s': structName})
+
+ # Row Initialization function.
+- print """
++ print("""
+ /* Clears the contents of 'row' in table "%(t)s". */
+ void
+ %(s)s_init(struct %(s)s *row)
+ {
+- memset(row, 0, sizeof *row); """ % {'s': structName, 't': tableName}
++ memset(row, 0, sizeof *row); """ % {'s': structName, 't': tableName})
+ for columnName, column in sorted_columns(table):
+ if column.type.is_smap():
+- print " smap_init(&row->%s);" % columnName
++ print(" smap_init(&row->%s);" % columnName)
+ elif (column.type.n_min == 1 and
+ column.type.n_max == 1 and
+ column.type.key.type == ovs.db.types.StringType and
+ not column.type.value):
+- print " row->%s = \"\";" % columnName
+- print "}"
++ print(" row->%s = \"\";" % columnName)
++ print("}")
+
+ # First, next functions.
+- print '''
++ print('''
+ /* Searches table "%(t)s" in 'idl' for a row with UUID 'uuid'. Returns
+ * a pointer to the row if there is one, otherwise a null pointer. */
+ const struct %(s)s *
+@@ -514,9 +515,9 @@ const struct %(s)s
+ 'P': prefix.upper(),
+ 't': tableName,
+ 'tl': tableName.lower(),
+- 'T': tableName.upper()}
++ 'T': tableName.upper()})
+
+- print '''
++ print('''
+
+ /* Deletes 'row' from table "%(t)s". 'row' may be freed, so it must not be
+ * accessed afterward.
+@@ -550,11 +551,11 @@ bool
+ 'P': prefix.upper(),
+ 't': tableName,
+ 'tl': tableName.lower(),
+- 'T': tableName.upper()}
++ 'T': tableName.upper()})
+
+ # Verify functions.
+ for columnName, column in sorted_columns(table):
+- print '''
++ print('''
+ /* Causes the original contents of column "%(c)s" in 'row' to be
+ * verified as a prerequisite to completing the transaction. That is, if
+ * "%(c)s" in 'row' changed (or if 'row' was deleted) between the
+@@ -585,7 +586,7 @@ void
+ }''' % {'s': structName,
+ 'S': structName.upper(),
+ 'c': columnName,
+- 'C': columnName.upper()}
++ 'C': columnName.upper()})
+
+ # Get functions.
+ for columnName, column in sorted_columns(table):
+@@ -597,7 +598,7 @@ void
+ valueParam = ''
+ valueType = ''
+ valueComment = ''
+- print """
++ print("""
+ /* Returns the "%(c)s" column's value from the "%(t)s" table in 'row'
+ * as a struct ovsdb_datum. This is useful occasionally: for example,
+ * ovsdb_datum_find_key() is an easier and more efficient way to search
+@@ -625,7 +626,7 @@ const struct ovsdb_datum *
+ return ovsdb_idl_read(&row->header_, &%(s)s_col_%(c)s);
+ }""" % {'t': tableName, 's': structName, 'c': columnName,
+ 'kt': column.type.key.toAtomicType(),
+- 'v': valueParam, 'vt': valueType, 'vc': valueComment}
++ 'v': valueParam, 'vt': valueType, 'vc': valueComment})
+
+ # Set functions.
+ for columnName, column in sorted_columns(table):
+@@ -635,8 +636,8 @@ const struct ovsdb_datum *
+ column, True)
+
+ if type.is_smap():
+- print comment
+- print """void
++ print(comment)
++ print("""void
+ %(s)s_set_%(c)s(const struct %(s)s *row, const struct smap *%(c)s)
+ {
+ struct ovsdb_datum datum;
+@@ -654,7 +655,7 @@ const struct ovsdb_datum *
+ 's': structName,
+ 'S': structName.upper(),
+ 'c': columnName,
+- 'C': columnName.upper()}
++ 'C': columnName.upper()})
+ continue
+
+ keyVar = members[0]['name']
+@@ -668,84 +669,84 @@ const struct ovsdb_datum *
+ if len(members) > 1:
+ nVar = members[1]['name']
+
+- print comment
+- print """\
++ print(comment)
++ print("""\
+ void
+ %(s)s_set_%(c)s(const struct %(s)s *row, %(args)s)
+ {
+ struct ovsdb_datum datum;""" % {'s': structName,
+ 'c': columnName,
+ 'args': ', '.join(['%(type)s%(name)s'
+- % m for m in members])}
++ % m for m in members])})
+ if type.n_min == 1 and type.n_max == 1:
+- print " union ovsdb_atom key;"
++ print(" union ovsdb_atom key;")
+ if type.value:
+- print " union ovsdb_atom value;"
+- print
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar)
++ print(" union ovsdb_atom value;")
++ print("")
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar))
+ if type.value:
+- print " datum.values = &value;"
+- print " "+ type.value.assign_c_value_casting_away_const("value.%s" % type.value.type.to_string(), valueVar)
++ print(" datum.values = &value;")
++ print(" "+ type.value.assign_c_value_casting_away_const("value.%s" % type.value.type.to_string(), valueVar))
+ else:
+- print " datum.values = NULL;"
++ print(" datum.values = NULL;")
+ txn_write_func = "ovsdb_idl_txn_write_clone"
+ elif type.is_optional_pointer():
+- print " union ovsdb_atom key;"
+- print
+- print " if (%s) {" % keyVar
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar)
+- print " } else {"
+- print " datum.n = 0;"
+- print " datum.keys = NULL;"
+- print " }"
+- print " datum.values = NULL;"
++ print(" union ovsdb_atom key;")
++ print("")
++ print(" if (%s) {" % keyVar)
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar))
++ print(" } else {")
++ print(" datum.n = 0;")
++ print(" datum.keys = NULL;")
++ print(" }")
++ print(" datum.values = NULL;")
+ txn_write_func = "ovsdb_idl_txn_write_clone"
+ elif type.n_max == 1:
+- print " union ovsdb_atom key;"
+- print
+- print " if (%s) {" % nVar
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), "*" + keyVar)
+- print " } else {"
+- print " datum.n = 0;"
+- print " datum.keys = NULL;"
+- print " }"
+- print " datum.values = NULL;"
++ print(" union ovsdb_atom key;")
++ print("")
++ print(" if (%s) {" % nVar)
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), "*" + keyVar))
++ print(" } else {")
++ print(" datum.n = 0;")
++ print(" datum.keys = NULL;")
++ print(" }")
++ print(" datum.values = NULL;")
+ txn_write_func = "ovsdb_idl_txn_write_clone"
+ else:
+- print
+- print " datum.n = %s;" % nVar
+- print " datum.keys = %s ? xmalloc(%s * sizeof *datum.keys) : NULL;" % (nVar, nVar)
++ print("")
++ print(" datum.n = %s;" % nVar)
++ print(" datum.keys = %s ? xmalloc(%s * sizeof *datum.keys) : NULL;" % (nVar, nVar))
+ if type.value:
+- print " datum.values = xmalloc(%s * sizeof *datum.values);" % nVar
++ print(" datum.values = xmalloc(%s * sizeof *datum.values);" % nVar)
+ else:
+- print " datum.values = NULL;"
+- print " for (size_t i = 0; i < %s; i++) {" % nVar
+- print " " + type.key.copyCValue("datum.keys[i].%s" % type.key.type.to_string(), "%s[i]" % keyVar)
++ print(" datum.values = NULL;")
++ print(" for (size_t i = 0; i < %s; i++) {" % nVar)
++ print(" " + type.key.copyCValue("datum.keys[i].%s" % type.key.type.to_string(), "%s[i]" % keyVar))
+ if type.value:
+- print " " + type.value.copyCValue("datum.values[i].%s" % type.value.type.to_string(), "%s[i]" % valueVar)
+- print " }"
++ print(" " + type.value.copyCValue("datum.values[i].%s" % type.value.type.to_string(), "%s[i]" % valueVar))
++ print(" }")
+ if type.value:
+ valueType = type.value.toAtomicType()
+ else:
+ valueType = "OVSDB_TYPE_VOID"
+ txn_write_func = "ovsdb_idl_txn_write"
+- print " %(f)s(&row->header_, &%(s)s_col_%(c)s, &datum);" \
++ print(" %(f)s(&row->header_, &%(s)s_col_%(c)s, &datum);" \
+ % {'f': txn_write_func,
+ 's': structName,
+ 'S': structName.upper(),
+- 'c': columnName}
+- print "}"
++ 'c': columnName})
++ print("}")
+ # Update/Delete of partial map column functions
+ for columnName, column in sorted_columns(table):
+ type = column.type
+ if type.is_map():
+- print '''
++ print('''
+ /* Sets an element of the "%(c)s" map column from the "%(t)s" table in 'row'
+ * to 'new_value' given the key value 'new_key'.
+ *
+@@ -761,17 +762,17 @@ void
+ datum->values = xmalloc(datum->n * sizeof *datum->values);
+ ''' % {'s': structName, 'c': columnName,'coltype':column.type.key.to_const_c_type(prefix),
+ 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper(),
+- 'C': columnName.upper(), 't': tableName}
++ 'C': columnName.upper(), 't': tableName})
+
+- print " "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "new_key")
+- print " "+ type.value.copyCValue("datum->values[0].%s" % type.value.type.to_string(), "new_value")
+- print '''
++ print(" "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "new_key"))
++ print(" "+ type.value.copyCValue("datum->values[0].%s" % type.value.type.to_string(), "new_value"))
++ print('''
+ ovsdb_idl_txn_write_partial_map(&row->header_,
+ &%(s)s_col_%(c)s,
+ datum);
+ }''' % {'s': structName, 'c': columnName,'coltype':column.type.key.toCType(prefix),
+- 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper()}
+- print '''
++ 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper()})
++ print('''
+ /* Deletes an element of the "%(c)s" map column from the "%(t)s" table in 'row'
+ * given the key value 'delete_key'.
+ *
+@@ -787,19 +788,19 @@ void
+ datum->values = NULL;
+ ''' % {'s': structName, 'c': columnName,'coltype':column.type.key.to_const_c_type(prefix),
+ 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper(),
+- 'C': columnName.upper(), 't': tableName}
++ 'C': columnName.upper(), 't': tableName})
+
+- print " "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "delete_key")
+- print '''
++ print(" "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "delete_key"))
++ print('''
+ ovsdb_idl_txn_delete_partial_map(&row->header_,
+ &%(s)s_col_%(c)s,
+ datum);
+ }''' % {'s': structName, 'c': columnName,'coltype':column.type.key.toCType(prefix),
+- 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper()}
++ 'valtype':column.type.value.to_const_c_type(prefix), 'S': structName.upper()})
+ # End Update/Delete of partial maps
+ # Update/Delete of partial set column functions
+ if type.is_set():
+- print '''
++ print('''
+ /* Adds the value 'new_value' to the "%(c)s" set column from the "%(t)s" table
+ * in 'row'.
+ *
+@@ -814,16 +815,16 @@ void
+ datum->keys = xmalloc(datum->n * sizeof *datum->values);
+ datum->values = NULL;
+ ''' % {'s': structName, 'c': columnName,
+- 'valtype':column.type.key.to_const_c_type(prefix), 't': tableName}
++ 'valtype':column.type.key.to_const_c_type(prefix), 't': tableName})
+
+- print " "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "new_value")
+- print '''
++ print(" "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "new_value"))
++ print('''
+ ovsdb_idl_txn_write_partial_set(&row->header_,
+ &%(s)s_col_%(c)s,
+ datum);
+ }''' % {'s': structName, 'c': columnName,'coltype':column.type.key.toCType(prefix),
+- 'valtype':column.type.key.to_const_c_type(prefix), 'S': structName.upper()}
+- print '''
++ 'valtype':column.type.key.to_const_c_type(prefix), 'S': structName.upper()})
++ print('''
+ /* Deletes the value 'delete_value' from the "%(c)s" set column from the
+ * "%(t)s" table in 'row'.
+ *
+@@ -839,15 +840,15 @@ void
+ datum->values = NULL;
+ ''' % {'s': structName, 'c': columnName,'coltype':column.type.key.to_const_c_type(prefix),
+ 'valtype':column.type.key.to_const_c_type(prefix), 'S': structName.upper(),
+- 'C': columnName.upper(), 't': tableName}
++ 'C': columnName.upper(), 't': tableName})
+
+- print " "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "delete_value")
+- print '''
++ print(" "+ type.key.copyCValue("datum->keys[0].%s" % type.key.type.to_string(), "delete_value"))
++ print('''
+ ovsdb_idl_txn_delete_partial_set(&row->header_,
+ &%(s)s_col_%(c)s,
+ datum);
+ }''' % {'s': structName, 'c': columnName,'coltype':column.type.key.toCType(prefix),
+- 'valtype':column.type.key.to_const_c_type(prefix), 'S': structName.upper()}
++ 'valtype':column.type.key.to_const_c_type(prefix), 'S': structName.upper()})
+ # End Update/Delete of partial set
+
+ # Add clause functions.
+@@ -858,8 +859,8 @@ void
+ column, True, refTable=False)
+
+ if type.is_smap():
+- print comment
+- print """void
++ print(comment)
++ print("""void
+ %(s)s_add_clause_%(c)s(struct ovsdb_idl_condition *cond, enum ovsdb_function function, const struct smap *%(c)s)
+ {
+ struct ovsdb_datum datum;
+@@ -884,7 +885,7 @@ void
+ 'P': prefix.upper(),
+ 's': structName,
+ 'S': structName.upper(),
+- 'c': columnName}
++ 'c': columnName})
+ continue
+
+ keyVar = members[0]['name']
+@@ -898,73 +899,73 @@ void
+ if len(members) > 1:
+ nVar = members[1]['name']
+
+- print comment
+- print 'void'
+- print '%(s)s_add_clause_%(c)s(struct ovsdb_idl_condition *cond, enum ovsdb_function function, %(args)s)' % \
++ print(comment)
++ print('void')
++ print('%(s)s_add_clause_%(c)s(struct ovsdb_idl_condition *cond, enum ovsdb_function function, %(args)s)' % \
+ {'s': structName, 'c': columnName,
+- 'args': ', '.join(['%(type)s%(name)s' % m for m in members])}
+- print "{"
+- print " struct ovsdb_datum datum;"
++ 'args': ', '.join(['%(type)s%(name)s' % m for m in members])})
++ print("{")
++ print(" struct ovsdb_datum datum;")
+ free = []
+ if type.n_min == 1 and type.n_max == 1:
+- print " union ovsdb_atom key;"
++ print(" union ovsdb_atom key;")
+ if type.value:
+- print " union ovsdb_atom value;"
+- print
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar, refTable=False)
++ print(" union ovsdb_atom value;")
++ print("")
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar, refTable=False))
+ if type.value:
+- print " datum.values = &value;"
+- print " "+ type.value.assign_c_value_casting_away_const("value.%s" % type.value.type.to_string(), valueVar, refTable=False)
++ print(" datum.values = &value;")
++ print(" "+ type.value.assign_c_value_casting_away_const("value.%s" % type.value.type.to_string(), valueVar, refTable=False))
+ else:
+- print " datum.values = NULL;"
++ print(" datum.values = NULL;")
+ elif type.is_optional_pointer():
+- print " union ovsdb_atom key;"
+- print
+- print " if (%s) {" % keyVar
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar, refTable=False)
+- print " } else {"
+- print " datum.n = 0;"
+- print " datum.keys = NULL;"
+- print " }"
+- print " datum.values = NULL;"
++ print(" union ovsdb_atom key;")
++ print("")
++ print(" if (%s) {" % keyVar)
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), keyVar, refTable=False))
++ print(" } else {")
++ print(" datum.n = 0;")
++ print(" datum.keys = NULL;")
++ print(" }")
++ print(" datum.values = NULL;")
+ elif type.n_max == 1:
+- print " union ovsdb_atom key;"
+- print
+- print " if (%s) {" % nVar
+- print " datum.n = 1;"
+- print " datum.keys = &key;"
+- print " " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), "*" + keyVar, refTable=False)
+- print " } else {"
+- print " datum.n = 0;"
+- print " datum.keys = NULL;"
+- print " }"
+- print " datum.values = NULL;"
++ print(" union ovsdb_atom key;")
++ print("")
++ print(" if (%s) {" % nVar)
++ print(" datum.n = 1;")
++ print(" datum.keys = &key;")
++ print(" " + type.key.assign_c_value_casting_away_const("key.%s" % type.key.type.to_string(), "*" + keyVar, refTable=False))
++ print(" } else {")
++ print(" datum.n = 0;")
++ print(" datum.keys = NULL;")
++ print(" }")
++ print(" datum.values = NULL;")
+ else:
+- print " datum.n = %s;" % nVar
+- print " datum.keys = %s ? xmalloc(%s * sizeof *datum.keys) : NULL;" % (nVar, nVar)
++ print(" datum.n = %s;" % nVar)
++ print(" datum.keys = %s ? xmalloc(%s * sizeof *datum.keys) : NULL;" % (nVar, nVar))
+ free += ['datum.keys']
+ if type.value:
+- print " datum.values = xmalloc(%s * sizeof *datum.values);" % nVar
++ print(" datum.values = xmalloc(%s * sizeof *datum.values);" % nVar)
+ free += ['datum.values']
+ else:
+- print " datum.values = NULL;"
+- print " for (size_t i = 0; i < %s; i++) {" % nVar
+- print " " + type.key.assign_c_value_casting_away_const("datum.keys[i].%s" % type.key.type.to_string(), "%s[i]" % keyVar, refTable=False)
++ print(" datum.values = NULL;")
++ print(" for (size_t i = 0; i < %s; i++) {" % nVar)
++ print(" " + type.key.assign_c_value_casting_away_const("datum.keys[i].%s" % type.key.type.to_string(), "%s[i]" % keyVar, refTable=False))
+ if type.value:
+- print " " + type.value.assign_c_value_casting_away_const("datum.values[i].%s" % type.value.type.to_string(), "%s[i]" % valueVar, refTable=False)
+- print " }"
++ print(" " + type.value.assign_c_value_casting_away_const("datum.values[i].%s" % type.value.type.to_string(), "%s[i]" % valueVar, refTable=False))
++ print(" }")
+ if type.value:
+ valueType = type.value.toAtomicType()
+ else:
+ valueType = "OVSDB_TYPE_VOID"
+- print " ovsdb_datum_sort_unique(&datum, %s, %s);" % (
+- type.key.toAtomicType(), valueType)
++ print(" ovsdb_datum_sort_unique(&datum, %s, %s);" % (
++ type.key.toAtomicType(), valueType))
+
+- print""" ovsdb_idl_condition_add_clause(cond,
++ print(""" ovsdb_idl_condition_add_clause(cond,
+ function,
+ &%(s)s_col_%(c)s,
+ &datum);\
+@@ -974,28 +975,28 @@ void
+ 'P': prefix.upper(),
+ 's': structName,
+ 'S': structName.upper(),
+- 'c': columnName}
++ 'c': columnName})
+ for var in free:
+- print " free(%s);" % var
+- print "}"
++ print(" free(%s);" % var)
++ print("}")
+
+- print """
++ print("""
+ void
+ %(s)s_set_condition(struct ovsdb_idl *idl, struct ovsdb_idl_condition *condition)
+ {
+ ovsdb_idl_set_condition(idl, &%(p)stable_%(tl)s, condition);
+ }""" % {'p': prefix,
+ 's': structName,
+- 'tl': tableName.lower()}
++ 'tl': tableName.lower()})
+
+ # Table columns.
+ for columnName, column in sorted_columns(table):
+ prereqs = []
+ x = column.type.cInitType("%s_col_%s" % (tableName, columnName), prereqs)
+ if prereqs:
+- print '\n'.join(prereqs)
+- print "\nstruct ovsdb_idl_column %s_columns[%s_N_COLUMNS] = {" % (
+- structName, structName.upper())
++ print('\n'.join(prereqs))
++ print("\nstruct ovsdb_idl_column %s_columns[%s_N_COLUMNS] = {" % (
++ structName, structName.upper()))
+ for columnName, column in sorted_columns(table):
+ if column.mutable:
+ mutable = "true"
+@@ -1003,7 +1004,7 @@ void
+ mutable = "false"
+ type_init = '\n'.join(" " + x
+ for x in column.type.cInitType("%s_col_%s" % (tableName, columnName), prereqs))
+- print """\
++ print("""\
+ [%(P)s%(T)s_COL_%(C)s] = {
+ .name = "%(c)s",
+ .type = {
+@@ -1018,38 +1019,38 @@ void
+ 'C': columnName.upper(),
+ 's': structName,
+ 'mutable': mutable,
+- 'type': type_init}
+- print "};"
++ 'type': type_init})
++ print("};")
+
+ # Table classes.
+- print " "
+- print "struct ovsdb_idl_table_class %stable_classes[%sN_TABLES] = {" % (prefix, prefix.upper())
++ print(" ")
++ print("struct ovsdb_idl_table_class %stable_classes[%sN_TABLES] = {" % (prefix, prefix.upper()))
+ for tableName, table in sorted(schema.tables.iteritems()):
+ structName = "%s%s" % (prefix, tableName.lower())
+ if table.is_root:
+ is_root = "true"
+ else:
+ is_root = "false"
+- print " {\"%s\", %s," % (tableName, is_root)
+- print " %s_columns, ARRAY_SIZE(%s_columns)," % (
+- structName, structName)
+- print " sizeof(struct %s), %s_init__}," % (structName, structName)
+- print "};"
++ print(" {\"%s\", %s," % (tableName, is_root))
++ print(" %s_columns, ARRAY_SIZE(%s_columns)," % (
++ structName, structName))
++ print(" sizeof(struct %s), %s_init__}," % (structName, structName))
++ print("};")
+
+ # IDL class.
+- print "\nstruct ovsdb_idl_class %sidl_class = {" % prefix
+- print " \"%s\", %stable_classes, ARRAY_SIZE(%stable_classes)" % (
+- schema.name, prefix, prefix)
+- print "};"
++ print("\nstruct ovsdb_idl_class %sidl_class = {" % prefix)
++ print(" \"%s\", %stable_classes, ARRAY_SIZE(%stable_classes)" % (
++ schema.name, prefix, prefix))
++ print("};")
+
+- print """
++ print("""
+ /* Return the schema version. The caller must not free the returned value. */
+ const char *
+ %sget_db_version(void)
+ {
+ return "%s";
+ }
+-""" % (prefix, schema.version)
++""" % (prefix, schema.version))
+
+
+
+@@ -1075,7 +1076,7 @@ def ovsdb_escape(string):
+ return re.sub(r'["\\\000-\037]', escape, string)
+
+ def usage():
+- print """\
++ print("""\
+ %(argv0)s: ovsdb schema compiler
+ usage: %(argv0)s [OPTIONS] COMMAND ARG...
+
+@@ -1087,7 +1088,7 @@ The following commands are supported:
+ The following options are also available:
+ -h, --help display this help message
+ -V, --version display version information\
+-""" % {'argv0': argv0}
++""" % {'argv0': argv0})
+ sys.exit(0)
+
+ if __name__ == "__main__":
+@@ -1105,7 +1106,7 @@ if __name__ == "__main__":
+ if key in ['-h', '--help']:
+ usage()
+ elif key in ['-V', '--version']:
+- print "ovsdb-idlc (Open vSwitch) @VERSION@"
++ print("ovsdb-idlc (Open vSwitch) @VERSION@")
+ elif key in ['-C', '--directory']:
+ os.chdir(value)
+ else:
+--
+2.5.0
+