enum: Return boolean result for enum_from_name() lookup
Handling the result for enum_from_name() is difficult, as checking for negative return values requires a cast if the enum type is unsigned. The new signature clearly differentiates lookup result from lookup value. Further, this actually allows to convert real -1 enum values, which could not be distinguished from "not-found" and the -1 return value. This also fixes several clang warnings where enums are unsigned.
This commit is contained in:
@@ -202,6 +202,7 @@ METHOD(coupling_validator_t, destroy, void,
|
||||
coupling_validator_t *coupling_validator_create()
|
||||
{
|
||||
private_coupling_validator_t *this;
|
||||
hash_algorithm_t alg;
|
||||
char *path, *hash;
|
||||
|
||||
INIT(this,
|
||||
@@ -219,8 +220,13 @@ coupling_validator_t *coupling_validator_create()
|
||||
|
||||
hash = lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.coupling.hash", "sha1", lib->ns);
|
||||
this->hasher = lib->crypto->create_hasher(lib->crypto,
|
||||
enum_from_name(hash_algorithm_short_names, hash));
|
||||
if (!enum_from_name(hash_algorithm_short_names, hash, &alg))
|
||||
{
|
||||
DBG1(DBG_CFG, "unknown coupling hash algorithm: %s", hash);
|
||||
destroy(this);
|
||||
return NULL;
|
||||
}
|
||||
this->hasher = lib->crypto->create_hasher(lib->crypto, alg);
|
||||
if (!this->hasher)
|
||||
{
|
||||
DBG1(DBG_CFG, "unsupported coupling hash algorithm: %s", hash);
|
||||
|
||||
@@ -362,8 +362,7 @@ static linked_list_t* parse_selector(char *selector)
|
||||
vendor = atoi(token);
|
||||
token = pos;
|
||||
}
|
||||
type = enum_from_name(radius_attribute_type_names, token);
|
||||
if (type == -1)
|
||||
if (!enum_from_name(radius_attribute_type_names, token, &type))
|
||||
{
|
||||
type = atoi(token);
|
||||
}
|
||||
|
||||
@@ -465,7 +465,6 @@ load_tester_creds_t *load_tester_creds_create()
|
||||
.private = load_issuer_key(),
|
||||
.ca = load_issuer_cert(),
|
||||
.cas = linked_list_create(),
|
||||
.digest = enum_from_name(hash_algorithm_short_names, digest),
|
||||
.psk = shared_key_create(SHARED_IKE,
|
||||
chunk_clone(chunk_create(psk, strlen(psk)))),
|
||||
.pwd = shared_key_create(SHARED_EAP,
|
||||
@@ -477,7 +476,7 @@ load_tester_creds_t *load_tester_creds_create()
|
||||
this->cas->insert_last(this->cas, this->ca->get_ref(this->ca));
|
||||
}
|
||||
|
||||
if (this->digest == -1)
|
||||
if (!enum_from_name(hash_algorithm_short_names, digest, &this->digest))
|
||||
{
|
||||
DBG1(DBG_CFG, "invalid load-tester digest: '%s', using sha1", digest);
|
||||
this->digest = HASH_SHA1;
|
||||
@@ -487,4 +486,3 @@ load_tester_creds_t *load_tester_creds_create()
|
||||
|
||||
return &this->public;
|
||||
}
|
||||
|
||||
|
||||
@@ -584,8 +584,7 @@ static void stroke_loglevel(private_stroke_socket_t *this,
|
||||
}
|
||||
else
|
||||
{
|
||||
group = enum_from_name(debug_names, msg->loglevel.type);
|
||||
if ((int)group < 0)
|
||||
if (!enum_from_name(debug_names, msg->loglevel.type, &group))
|
||||
{
|
||||
fprintf(out, "unknown type '%s'!\n", msg->loglevel.type);
|
||||
return;
|
||||
|
||||
@@ -729,8 +729,7 @@ CALLBACK(list_certs, vici_message_t*,
|
||||
char *str;
|
||||
|
||||
str = request->get_str(request, "ANY", "type");
|
||||
type = enum_from_name(certificate_type_names, str);
|
||||
if (type == -1)
|
||||
if (!enum_from_name(certificate_type_names, str, &type))
|
||||
{
|
||||
b = vici_builder_create();
|
||||
return b->finalize(b);
|
||||
|
||||
Reference in New Issue
Block a user