xref: /dpdk/lib/eal/common/rte_bitset.c (revision 99a1197647d803e43a676622396ffddf6bf93b62)
1*99a11976SMattias Rönnblom /* SPDX-License-Identifier: BSD-3-Clause
2*99a11976SMattias Rönnblom  * Copyright(c) 2023 Ericsson AB
3*99a11976SMattias Rönnblom  */
4*99a11976SMattias Rönnblom 
5*99a11976SMattias Rönnblom #include <errno.h>
6*99a11976SMattias Rönnblom #include <stdbool.h>
7*99a11976SMattias Rönnblom #include <stdint.h>
8*99a11976SMattias Rönnblom #include <sys/types.h>
9*99a11976SMattias Rönnblom 
10*99a11976SMattias Rönnblom #include "rte_bitset.h"
11*99a11976SMattias Rönnblom 
12*99a11976SMattias Rönnblom ssize_t
13*99a11976SMattias Rönnblom rte_bitset_to_str(const uint64_t *bitset, size_t num_bits, char *buf, size_t capacity)
14*99a11976SMattias Rönnblom {
15*99a11976SMattias Rönnblom 	size_t i;
16*99a11976SMattias Rönnblom 
17*99a11976SMattias Rönnblom 	if (capacity < (num_bits + 1))
18*99a11976SMattias Rönnblom 		return -EINVAL;
19*99a11976SMattias Rönnblom 
20*99a11976SMattias Rönnblom 	for (i = 0; i < num_bits; i++) {
21*99a11976SMattias Rönnblom 		bool value;
22*99a11976SMattias Rönnblom 
23*99a11976SMattias Rönnblom 		value = rte_bitset_test(bitset, num_bits - 1 - i);
24*99a11976SMattias Rönnblom 		buf[i] = value ? '1' : '0';
25*99a11976SMattias Rönnblom 	}
26*99a11976SMattias Rönnblom 
27*99a11976SMattias Rönnblom 	buf[num_bits] = '\0';
28*99a11976SMattias Rönnblom 
29*99a11976SMattias Rönnblom 	return num_bits + 1;
30*99a11976SMattias Rönnblom }
31