Messages in this thread Patch in this message | | | From | Bert Wesarg <> | Subject | [PATCH] Fix calculus of bitmap_scnprintf_len() | Date | Sun, 27 Apr 2008 22:43:23 +0200 |
| |
The function bitmap_scnprintf_len() is currently not used, but the returned value is 4 times larger than needed. This value is also only a good upper bound. Which should be mentioned in the comment.
The correct number of chars needed for the buffer, exluding any new line and terminating zero is:
int bitmap_scnprintf_len(int len) { return /* complete hunks with commas */ ((len / CHUNKSZ) * 9) /* partial hunk, 4 bits in one char */ + (((len % CHUNKSZ) + 3) / 4) /* one less comma, if no partial hunk */ - !(len % CHUNKSZ); }
Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com> Cc: Mike Travis <travis@sgi.com> Cc: Paul Jackson <pj@sgi.com>
--- lib/bitmap.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/bitmap.c b/lib/bitmap.c index a6939e1..47e6f0f 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -325,7 +325,7 @@ 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); + int buflen = (bitslen / CHUNKSZ) * (wordlen + 1); return buflen; } -- 1.5.4
| |