summaryrefslogtreecommitdiff
path: root/libdm/libdevmapper.h
diff options
context:
space:
mode:
authorBryn M. Reeves <bmr@redhat.com>2016-02-18 16:14:43 +0000
committerBryn M. Reeves <bmr@redhat.com>2016-07-05 19:53:16 +0100
commit81fad9e853c45a5c3e56b2bede3a3fc7d7bed30b (patch)
treef89210ebf2a4f00693259553a1935ea9a5b6dfb0 /libdm/libdevmapper.h
parentd382e660356f1095040b8a84b54a0c1db0ab78b1 (diff)
downloadlvm2-81fad9e853c45a5c3e56b2bede3a3fc7d7bed30b.tar.gz
libdm: add dm_bitset_parse_list()
Add a function to parse a list of integer values and ranges into a dm_bitset representation. Individual values signify that that bit is set in the resulting mask and ranges are given as a pair of start and end values, M-N, such that M and N are the first and last members of the range (inclusive). The implementation is based on the kernel's __bitmap_parselist() that is used for cpumasks and other set configuration passed in string form from user space.
Diffstat (limited to 'libdm/libdevmapper.h')
-rw-r--r--libdm/libdevmapper.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 7fd765c8e..36681882d 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -1843,6 +1843,16 @@ int dm_bit_get_next(dm_bitset_t bs, int last_bit);
#define dm_bit_copy(bs1, bs2) \
memcpy((bs1) + 1, (bs2) + 1, ((*(bs1) / DM_BITS_PER_INT) + 1) * sizeof(int))
+/*
+ * Parse a string representation of a bitset into a dm_bitset_t. The
+ * notation used is identical to the kernel bitmap parser (cpuset etc.)
+ * and supports both lists ("1,2,3") and ranges ("1-2,5-8"). If the mem
+ * parameter is NULL memory for the bitset will be allocated using
+ * dm_malloc(). Otherwise the bitset will be allocated using the supplied
+ * dm_pool.
+ */
+dm_bitset_t dm_bitset_parse_list(const char *str, struct dm_pool *mem);
+
/* Returns number of set bits */
static inline unsigned hweight32(uint32_t i)
{