From 1239804fa06f346b10c9b36773812d7e0fa9aa7c Mon Sep 17 00:00:00 2001 From: Jeremy Sowden Date: Sat, 11 Dec 2021 18:55:23 +0000 Subject: proto: short-circuit loops over upper protocols Each `struct proto_desc` contains a fixed-size array of higher layer protocols. Only the first few are not NULL. Therefore, we can stop iterating over the array once we reach a NULL member. Signed-off-by: Jeremy Sowden Signed-off-by: Pablo Neira Ayuso --- src/proto.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/proto.c') diff --git a/src/proto.c b/src/proto.c index fe58c83a..31a2f380 100644 --- a/src/proto.c +++ b/src/proto.c @@ -59,7 +59,8 @@ proto_find_upper(const struct proto_desc *base, unsigned int num) { unsigned int i; - for (i = 0; i < array_size(base->protocols); i++) { + for (i = 0; i < array_size(base->protocols) && base->protocols[i].desc; + i++) { if (base->protocols[i].num == num) return base->protocols[i].desc; } @@ -77,7 +78,8 @@ int proto_find_num(const struct proto_desc *base, { unsigned int i; - for (i = 0; i < array_size(base->protocols); i++) { + for (i = 0; i < array_size(base->protocols) && base->protocols[i].desc; + i++) { if (base->protocols[i].desc == desc) return base->protocols[i].num; } @@ -105,7 +107,9 @@ int proto_dev_type(const struct proto_desc *desc, uint16_t *res) *res = dev_proto_desc[i].type; return 0; } - for (j = 0; j < array_size(base->protocols); j++) { + for (j = 0; j < array_size(base->protocols) && + base->protocols[j].desc; + j++) { if (base->protocols[j].desc == desc) { *res = dev_proto_desc[i].type; return 0; -- cgit v1.2.3