Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd2602d0 authored by Gao Feng's avatar Gao Feng Committed by Pablo Neira Ayuso
Browse files

netfilter: xt_multiport: Use switch case instead of multiple condition checks



There are multiple equality condition checks in the original codes, so it
is better to use switch case instead of them.

Signed-off-by: default avatarGao Feng <fgao@ikuai8.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 432490f9
Loading
Loading
Loading
Loading
+21 −19
Original line number Diff line number Diff line
@@ -42,29 +42,31 @@ ports_match_v1(const struct xt_multiport_v1 *minfo,
			e = minfo->ports[++i];
			pr_debug("src or dst matches with %d-%d?\n", s, e);

			if (minfo->flags == XT_MULTIPORT_SOURCE
			    && src >= s && src <= e)
				return true ^ minfo->invert;
			if (minfo->flags == XT_MULTIPORT_DESTINATION
			    && dst >= s && dst <= e)
				return true ^ minfo->invert;
			if (minfo->flags == XT_MULTIPORT_EITHER
			    && ((dst >= s && dst <= e)
				|| (src >= s && src <= e)))
				return true ^ minfo->invert;
			switch (minfo->flags) {
			case XT_MULTIPORT_SOURCE:
				return (src >= s && src <= e) ^ minfo->invert;
			case XT_MULTIPORT_DESTINATION:
				return (dst >= s && dst <= e) ^ minfo->invert;
			case XT_MULTIPORT_EITHER:
				return ((dst >= s && dst <= e) ||
					(src >= s && src <= e)) ^ minfo->invert;
			default:
				break;
			}
		} else {
			/* exact port matching */
			pr_debug("src or dst matches with %d?\n", s);

			if (minfo->flags == XT_MULTIPORT_SOURCE
			    && src == s)
				return true ^ minfo->invert;
			if (minfo->flags == XT_MULTIPORT_DESTINATION
			    && dst == s)
				return true ^ minfo->invert;
			if (minfo->flags == XT_MULTIPORT_EITHER
			    && (src == s || dst == s))
				return true ^ minfo->invert;
			switch (minfo->flags) {
			case XT_MULTIPORT_SOURCE:
				return (src == s) ^ minfo->invert;
			case XT_MULTIPORT_DESTINATION:
				return (dst == s) ^ minfo->invert;
			case XT_MULTIPORT_EITHER:
				return (src == s || dst == s) ^ minfo->invert;
			default:
				break;
			}
		}
	}