xref: /linux/tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum_be.j2 (revision 2831fa8b8bcf1083f9526aa0c41fafb0796cf874)
1{# SPDX-License-Identifier: GPL-2.0 #}
2
3{% if annotate %}
4/* enum {{ name }} (big-endian) */
5{% endif %}
6{% if name in public_apis %}
7bool
8{% else %}
9static bool __maybe_unused
10{% endif %}
11xdrgen_decode_{{ name }}(struct xdr_stream *xdr, {{ name }} *ptr)
12{
13{% if validate and enumerators %}
14	__be32 raw;
15	u32 val;
16
17	if (xdr_stream_decode_be32(xdr, &raw) < 0)
18		return false;
19	val = be32_to_cpu(raw);
20	/* Compiler may optimize to a range check for dense enums */
21	switch (val) {
22{% for e in enumerators %}
23	case {{ e.name }}:
24{% endfor %}
25		break;
26	default:
27		return false;
28	}
29	*ptr = raw;
30	return true;
31{% else %}
32	return xdr_stream_decode_be32(xdr, ptr) == 0;
33{% endif %}
34}
35