aboutsummaryrefslogtreecommitdiff
path: root/lib/bitmap.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-08-26 12:58:36 -0700
committerBen Pfaff <blp@nicira.com>2011-09-26 13:15:56 -0700
commit77d895d6867461b2433616d10ddf2c5fa0b6f4d3 (patch)
treef2a14adc6bb8aebd5fdc561244b15ceae006641d /lib/bitmap.c
parent04c956fc029bb97de17b62cb6d243b50f0bc9f58 (diff)
bitmap: New function to allocate a bitmap initialized to all-1-bits.
Diffstat (limited to 'lib/bitmap.c')
-rw-r--r--lib/bitmap.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/bitmap.c b/lib/bitmap.c
index df3c4ebc..76a667a0 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,25 @@
#include "bitmap.h"
#include <string.h>
+/* Allocates and returns a bitmap initialized to all-1-bits. */
+unsigned long *
+bitmap_allocate1(size_t n_bits)
+{
+ size_t n_bytes = bitmap_n_bytes(n_bits);
+ size_t n_longs = bitmap_n_longs(n_bits);
+ unsigned long *bitmap;
+
+ /* Allocate and initialize most of the bitmap. */
+ bitmap = xmalloc(n_bytes);
+ memset(bitmap, 0xff, n_bytes);
+
+ /* Ensure that the last "unsigned long" in the bitmap only has as many
+ * 1-bits as there actually should be. */
+ bitmap[n_longs - 1] = (1UL << (n_bits % BITMAP_ULONG_BITS)) - 1;
+
+ return bitmap;
+}
+
/* Sets 'count' consecutive bits in 'bitmap', starting at bit offset 'start',
* to 'value'. */
void