mirror of
https://github.com/openvswitch/ovs
synced 2025-09-05 08:45:23 +00:00
Embrace anonymous unions.
Several OVS structs contain embedded named unions, like this: struct { ... union { ... } u; }; C11 standardized a feature that many compilers already implemented anyway, where an embedded union may be unnamed, like this: struct { ... union { ... }; }; This is more convenient because it allows the programmer to omit "u." in many places. OVS already used this feature in several places. This commit embraces it in several others. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Justin Pettit <jpettit@ovn.org> Tested-by: Alin Gabriel Serdean <aserdean@ovn.org> Acked-by: Alin Gabriel Serdean <aserdean@ovn.org>
This commit is contained in:
@@ -262,16 +262,16 @@ unwrap_json(const struct json *json, const char *name,
|
||||
enum json_type value_type, const struct json **value)
|
||||
{
|
||||
if (json->type != JSON_ARRAY
|
||||
|| json->u.array.n != 2
|
||||
|| json->u.array.elems[0]->type != JSON_STRING
|
||||
|| (name && strcmp(json->u.array.elems[0]->u.string, name))
|
||||
|| json->u.array.elems[1]->type != value_type)
|
||||
|| json->array.n != 2
|
||||
|| json->array.elems[0]->type != JSON_STRING
|
||||
|| (name && strcmp(json->array.elems[0]->string, name))
|
||||
|| json->array.elems[1]->type != value_type)
|
||||
{
|
||||
*value = NULL;
|
||||
return ovsdb_syntax_error(json, NULL, "expected [\"%s\", <%s>]", name,
|
||||
json_type_to_string(value_type));
|
||||
}
|
||||
*value = json->u.array.elems[1];
|
||||
*value = json->array.elems[1];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -279,11 +279,11 @@ static struct ovsdb_error *
|
||||
parse_json_pair(const struct json *json,
|
||||
const struct json **elem0, const struct json **elem1)
|
||||
{
|
||||
if (json->type != JSON_ARRAY || json->u.array.n != 2) {
|
||||
if (json->type != JSON_ARRAY || json->array.n != 2) {
|
||||
return ovsdb_syntax_error(json, NULL, "expected 2-element array");
|
||||
}
|
||||
*elem0 = json->u.array.elems[0];
|
||||
*elem1 = json->u.array.elems[1];
|
||||
*elem0 = json->array.elems[0];
|
||||
*elem1 = json->array.elems[1];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -293,8 +293,8 @@ ovsdb_symbol_referenced(struct ovsdb_symbol *symbol,
|
||||
{
|
||||
ovs_assert(base->type == OVSDB_TYPE_UUID);
|
||||
|
||||
if (base->u.uuid.refTableName) {
|
||||
switch (base->u.uuid.refType) {
|
||||
if (base->uuid.refTableName) {
|
||||
switch (base->uuid.refType) {
|
||||
case OVSDB_REF_STRONG:
|
||||
symbol->strong_ref = true;
|
||||
break;
|
||||
@@ -377,17 +377,17 @@ ovsdb_atom_from_json__(union ovsdb_atom *atom,
|
||||
|
||||
case OVSDB_TYPE_INTEGER:
|
||||
if (json->type == JSON_INTEGER) {
|
||||
atom->integer = json->u.integer;
|
||||
atom->integer = json->integer;
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case OVSDB_TYPE_REAL:
|
||||
if (json->type == JSON_INTEGER) {
|
||||
atom->real = json->u.integer;
|
||||
atom->real = json->integer;
|
||||
return NULL;
|
||||
} else if (json->type == JSON_REAL) {
|
||||
atom->real = json->u.real;
|
||||
atom->real = json->real;
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
@@ -404,7 +404,7 @@ ovsdb_atom_from_json__(union ovsdb_atom *atom,
|
||||
|
||||
case OVSDB_TYPE_STRING:
|
||||
if (json->type == JSON_STRING) {
|
||||
atom->string = xstrdup(json->u.string);
|
||||
atom->string = xstrdup(json->string);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
@@ -720,7 +720,7 @@ ovsdb_atom_to_string(const union ovsdb_atom *atom, enum ovsdb_atomic_type type,
|
||||
struct json json;
|
||||
|
||||
json.type = JSON_STRING;
|
||||
json.u.string = atom->string;
|
||||
json.string = atom->string;
|
||||
json_to_ds(&json, 0, out);
|
||||
} else {
|
||||
ds_put_cstr(out, atom->string);
|
||||
@@ -817,54 +817,54 @@ ovsdb_atom_check_constraints(const union ovsdb_atom *atom,
|
||||
OVS_NOT_REACHED();
|
||||
|
||||
case OVSDB_TYPE_INTEGER:
|
||||
if (atom->integer >= base->u.integer.min
|
||||
&& atom->integer <= base->u.integer.max) {
|
||||
if (atom->integer >= base->integer.min
|
||||
&& atom->integer <= base->integer.max) {
|
||||
return NULL;
|
||||
} else if (base->u.integer.min != INT64_MIN) {
|
||||
if (base->u.integer.max != INT64_MAX) {
|
||||
} else if (base->integer.min != INT64_MIN) {
|
||||
if (base->integer.max != INT64_MAX) {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%"PRId64" is not in the valid range "
|
||||
"%"PRId64" to %"PRId64" (inclusive)",
|
||||
atom->integer,
|
||||
base->u.integer.min, base->u.integer.max);
|
||||
base->integer.min, base->integer.max);
|
||||
} else {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%"PRId64" is less than minimum allowed "
|
||||
"value %"PRId64,
|
||||
atom->integer, base->u.integer.min);
|
||||
atom->integer, base->integer.min);
|
||||
}
|
||||
} else {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%"PRId64" is greater than maximum allowed "
|
||||
"value %"PRId64,
|
||||
atom->integer, base->u.integer.max);
|
||||
atom->integer, base->integer.max);
|
||||
}
|
||||
OVS_NOT_REACHED();
|
||||
|
||||
case OVSDB_TYPE_REAL:
|
||||
if (atom->real >= base->u.real.min && atom->real <= base->u.real.max) {
|
||||
if (atom->real >= base->real.min && atom->real <= base->real.max) {
|
||||
return NULL;
|
||||
} else if (base->u.real.min != -DBL_MAX) {
|
||||
if (base->u.real.max != DBL_MAX) {
|
||||
} else if (base->real.min != -DBL_MAX) {
|
||||
if (base->real.max != DBL_MAX) {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%.*g is not in the valid range "
|
||||
"%.*g to %.*g (inclusive)",
|
||||
DBL_DIG, atom->real,
|
||||
DBL_DIG, base->u.real.min,
|
||||
DBL_DIG, base->u.real.max);
|
||||
DBL_DIG, base->real.min,
|
||||
DBL_DIG, base->real.max);
|
||||
} else {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%.*g is less than minimum allowed "
|
||||
"value %.*g",
|
||||
DBL_DIG, atom->real,
|
||||
DBL_DIG, base->u.real.min);
|
||||
DBL_DIG, base->real.min);
|
||||
}
|
||||
} else {
|
||||
return ovsdb_error("constraint violation",
|
||||
"%.*g is greater than maximum allowed "
|
||||
"value %.*g",
|
||||
DBL_DIG, atom->real,
|
||||
DBL_DIG, base->u.real.max);
|
||||
DBL_DIG, base->real.max);
|
||||
}
|
||||
OVS_NOT_REACHED();
|
||||
|
||||
@@ -872,7 +872,7 @@ ovsdb_atom_check_constraints(const union ovsdb_atom *atom,
|
||||
return NULL;
|
||||
|
||||
case OVSDB_TYPE_STRING:
|
||||
return check_string_constraints(atom->string, &base->u.string);
|
||||
return check_string_constraints(atom->string, &base->string);
|
||||
|
||||
case OVSDB_TYPE_UUID:
|
||||
return NULL;
|
||||
@@ -1218,9 +1218,9 @@ ovsdb_datum_from_json__(struct ovsdb_datum *datum,
|
||||
|
||||
if (ovsdb_type_is_map(type)
|
||||
|| (json->type == JSON_ARRAY
|
||||
&& json->u.array.n > 0
|
||||
&& json->u.array.elems[0]->type == JSON_STRING
|
||||
&& !strcmp(json->u.array.elems[0]->u.string, "set"))) {
|
||||
&& json->array.n > 0
|
||||
&& json->array.elems[0]->type == JSON_STRING
|
||||
&& !strcmp(json->array.elems[0]->string, "set"))) {
|
||||
bool is_map = ovsdb_type_is_map(type);
|
||||
const char *class = is_map ? "map" : "set";
|
||||
const struct json *inner;
|
||||
@@ -1232,7 +1232,7 @@ ovsdb_datum_from_json__(struct ovsdb_datum *datum,
|
||||
return error;
|
||||
}
|
||||
|
||||
n = inner->u.array.n;
|
||||
n = inner->array.n;
|
||||
if (n < type->n_min || n > type->n_max) {
|
||||
return ovsdb_syntax_error(json, NULL, "%s must have %u to "
|
||||
"%u members but %"PRIuSIZE" are present",
|
||||
@@ -1243,7 +1243,7 @@ ovsdb_datum_from_json__(struct ovsdb_datum *datum,
|
||||
datum->keys = xmalloc(n * sizeof *datum->keys);
|
||||
datum->values = is_map ? xmalloc(n * sizeof *datum->values) : NULL;
|
||||
for (i = 0; i < n; i++) {
|
||||
const struct json *element = inner->u.array.elems[i];
|
||||
const struct json *element = inner->array.elems[i];
|
||||
const struct json *key = NULL;
|
||||
const struct json *value = NULL;
|
||||
|
||||
@@ -1365,7 +1365,7 @@ ovsdb_base_to_json(const union ovsdb_atom *atom,
|
||||
{
|
||||
if (!use_row_names
|
||||
|| base->type != OVSDB_TYPE_UUID
|
||||
|| !base->u.uuid.refTableName) {
|
||||
|| !base->uuid.refTableName) {
|
||||
return ovsdb_atom_to_json(atom, base->type);
|
||||
} else {
|
||||
return json_array_create_2(
|
||||
|
Reference in New Issue
Block a user