[ovs-dev] [PATCH 2/3] idl: Generalize special case boolean exception.
Ethan Jackson
ethan at nicira.com
Wed Feb 8 03:28:53 UTC 2012
Sparse doesn't like taking sizeof boolean values. The idl had
worked around this limitation with a special case in the case of
optional booleans. A future patch needs an array with boolean
values which the existing special case did not handle. This patch
generalizes the special case to handle this situation as well.
Signed-off-by: Ethan Jackson <ethan at nicira.com>
---
ovsdb/ovsdb-idlc.in | 42 +++++++++++++++++-------------------------
1 files changed, 17 insertions(+), 25 deletions(-)
diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in
index d711541..2811fb6 100755
--- a/ovsdb/ovsdb-idlc.in
+++ b/ovsdb/ovsdb-idlc.in
@@ -27,8 +27,6 @@ def constify(cType, const):
def cMembers(prefix, columnName, column, const):
type = column.type
- if is_optional_bool(type):
- const = True
if type.n_min == 1 and type.n_max == 1:
singleton = True
pointer = ''
@@ -167,10 +165,6 @@ def printEnum(members):
print " %s" % members[-1]
print "};"
-def is_optional_bool(type):
- return (type.key.type == ovs.db.types.BooleanType and not type.value
- and type.n_min == 0 and type.n_max == 1)
-
def printCIDLSource(schemaFile):
schema = parseSchema(schemaFile)
prefix = schema.idlPrefix
@@ -221,23 +215,7 @@ static void
keyVar = "row->%s" % columnName
valueVar = None
- if is_optional_bool(type):
- # Special case for an optional bool. This is only here because
- # sparse does not like the "normal" case below ("warning:
- # expression using sizeof bool").
- print
- print " assert(inited);"
- print " if (datum->n >= 1) {"
- print " static const bool false_value = false;"
- print " static const bool true_value = true;"
- print
- print " row->n_%s = 1;" % columnName
- print " %s = datum->keys[0].boolean ? &true_value : &false_value;" % keyVar
- print " } else {"
- print " row->n_%s = 0;" % columnName
- print " %s = NULL;" % keyVar
- print " }"
- elif (type.n_min == 1 and type.n_max == 1) or type.is_optional_pointer():
+ if (type.n_min == 1 and type.n_max == 1) or type.is_optional_pointer():
print
print " assert(inited);"
print " if (datum->n >= 1) {"
@@ -289,9 +267,23 @@ static void
else:
indent = " "
print "%sif (!row->n_%s) {" % (indent, columnName)
- print "%s %s = xmalloc(%s * sizeof *%s);" % (indent, keyVar, nMax, keyVar)
+
+
+ # Special case for an optional boolean types. This is only
+ # here because sparse does not like the "normal" case
+ # ("warning: expression using sizeof bool").
+ sizeMult = ""
+ if type.key.type != ovs.db.types.BooleanType:
+ sizeMult = " * sizeof *%s" % keyVar
+ print "%s %s = xmalloc(%s%s);" % (indent, keyVar, nMax,
+ sizeMult)
if valueVar:
- print "%s %s = xmalloc(%s * sizeof *%s);" % (indent, valueVar, nMax, valueVar)
+ # Special case for an optional boolean types (see above).
+ sizeMult = ""
+ if type.value.type != ovs.db.types.BooleanType:
+ sizeMult = " * sizeof *%s" % valueVar
+ print "%s %s = xmalloc(%s%s);" % (indent, valueVar,
+ nMax, sizeMult)
print "%s}" % indent
print "%s%s[row->n_%s] = %s;" % (indent, keyVar, columnName, keySrc)
if valueVar:
--
1.7.8.3
More information about the dev
mailing list