X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=lib%2Fbitmap.c;h=a6939e18d7bb3bc4f8d0caba8004e6b075bd3983;hb=b3ea01668907bdb32b0c690d28f9f2b1298bd258;hp=26ebafa8c41d7e0ff602c0d2137a8ea284bb1ae5;hpb=5cb69bcacea70024252138a9cb4229a142a93389;p=linux-2.6-omap-h63xx.git diff --git a/lib/bitmap.c b/lib/bitmap.c index 26ebafa8c41..a6939e18d7b 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -315,6 +315,22 @@ int bitmap_scnprintf(char *buf, unsigned int buflen, } EXPORT_SYMBOL(bitmap_scnprintf); +/** + * bitmap_scnprintf_len - return buffer length needed to convert + * bitmap to an ASCII hex string. + * @len: number of bits to be converted + */ +int bitmap_scnprintf_len(unsigned int len) +{ + /* we need 9 chars per word for 32 bit words (8 hexdigits + sep/null) */ + int bitslen = ALIGN(len, CHUNKSZ); + int wordlen = CHUNKSZ / 4; + int buflen = (bitslen / wordlen) * (wordlen + 1) * sizeof(char); + + return buflen; +} +EXPORT_SYMBOL(bitmap_scnprintf_len); + /** * __bitmap_parse - convert an ASCII hex string into a bitmap. * @buf: pointer to buffer containing string. @@ -469,6 +485,10 @@ int bitmap_scnlistprintf(char *buf, unsigned int buflen, /* current bit is 'cur', most recently seen range is [rbot, rtop] */ int cur, rbot, rtop; + if (buflen == 0) + return 0; + buf[0] = 0; + rbot = cur = find_first_bit(maskp, nmaskbits); while (cur < nmaskbits) { rtop = cur;