summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2020-05-25 18:21:39 +0200
committerIlya Maximets <i.maximets@ovn.org>2020-06-01 13:05:22 +0200
commitf546935fecf7e0dc09ea3d142ce117921e164bca (patch)
tree4bc2f0ede177fb9b8352b2c5bd9a0d2cdc491e62
parent340da6d048d7e4550e437e9a278ace6d23dd50b1 (diff)
downloadopenvswitch-f546935fecf7e0dc09ea3d142ce117921e164bca.tar.gz
ovsdb: Fix timeout type for wait operation.
According to RFC 7047, 'timeout' is an integer field: 5.2.6. Wait The "wait" object contains the following members: "op": "wait" required "timeout": <integer> optional ... For some reason initial implementation treated it as a real number. This causes a build issue with clang that complains that LLONG_MAX could not be represented as double: ovsdb/execution.c:733:32: error: implicit conversion from 'long long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 timeout_msec = MIN(LLONG_MAX, json_real(timeout)); ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/sys/limits.h:69:19: note: expanded from macro 'LLONG_MAX' #define LLONG_MAX __LLONG_MAX /* max for a long long */ ^~~~~~~~~~~ /usr/include/x86/_limits.h:74:21: note: expanded from macro '__LLONG_MAX' #define __LLONG_MAX 0x7fffffffffffffffLL /* max value for a long long */ ^~~~~~~~~~~~~~~~~~~~ ./lib/util.h:90:21: note: expanded from macro 'MIN' #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) ^ ~ Fix that by changing parser to treat 'timeout' as integer. Fixes clang build on FreeBSD 12.1 in CirrusCI. Fixes: f85f8ebbfac9 ("Initial implementation of OVSDB.") Acked-by: Han Zhou <hzhou@ovn.org> Acked-by: Numan Siddique <numans@ovn.org> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r--ovsdb/execution.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ovsdb/execution.c b/ovsdb/execution.c
index 016b9c687..295fca742 100644
--- a/ovsdb/execution.c
+++ b/ovsdb/execution.c
@@ -666,7 +666,7 @@ ovsdb_execute_wait(struct ovsdb_execution *x, struct ovsdb_parser *parser,
long long int timeout_msec = 0;
size_t i;
- timeout = ovsdb_parser_member(parser, "timeout", OP_NUMBER | OP_OPTIONAL);
+ timeout = ovsdb_parser_member(parser, "timeout", OP_INTEGER | OP_OPTIONAL);
where = ovsdb_parser_member(parser, "where", OP_ARRAY);
columns_json = ovsdb_parser_member(parser, "columns",
OP_ARRAY | OP_OPTIONAL);
@@ -684,7 +684,7 @@ ovsdb_execute_wait(struct ovsdb_execution *x, struct ovsdb_parser *parser,
}
if (!error) {
if (timeout) {
- timeout_msec = MIN(LLONG_MAX, json_real(timeout));
+ timeout_msec = json_integer(timeout);
if (timeout_msec < 0) {
error = ovsdb_syntax_error(timeout, NULL,
"timeout must be nonnegative");