Looks good.

Ethan

On Tue, Nov 15, 2011 at 17:17, Ben Pfaff <b...@nicira.com> wrote:
> ---
>  lib/vlan-bitmap.c |   26 ++++++++++++++++++--------
>  lib/vlan-bitmap.h |    3 +++
>  2 files changed, 21 insertions(+), 8 deletions(-)
>
> diff --git a/lib/vlan-bitmap.c b/lib/vlan-bitmap.c
> index 94059c7..4c5c1eb 100644
> --- a/lib/vlan-bitmap.c
> +++ b/lib/vlan-bitmap.c
> @@ -24,29 +24,39 @@ unsigned long *
>  vlan_bitmap_from_array(const int64_t *vlans, size_t n_vlans)
>  {
>     unsigned long *b;
> -    size_t i, n;
>
>     if (!n_vlans) {
>         return NULL;
>     }
>
>     b = bitmap_allocate(4096);
> +    if (!vlan_bitmap_from_array__(vlans, n_vlans, b)) {
> +        free(b);
> +        return NULL;
> +    }
> +    return b;
> +}
> +
> +/* Adds to 4096-bit VLAN bitmap 'b' a 1-bit in each position in the 'n_vlans'
> + * bits indicated in 'vlans'.  Returns the number of 1-bits added to 'b'. */
> +int
> +vlan_bitmap_from_array__(const int64_t *vlans, size_t n_vlans,
> +                         unsigned long int *b)
> +{
> +    size_t i;
> +    int n;
> +
>     n = 0;
>     for (i = 0; i < n_vlans; i++) {
>         int64_t vlan = vlans[i];
>
> -        if (vlan >= 0 && vlan < 4096) {
> +        if (vlan >= 0 && vlan < 4096 && !bitmap_is_set(b, vlan)) {
>             bitmap_set1(b, vlan);
>             n++;
>         }
>     }
>
> -    if (!n) {
> -        free(b);
> -        return NULL;
> -    }
> -
> -    return b;
> +    return n;
>  }
>
>  /* Returns true if 'a' and 'b' are the same: either both null or both the 
> same
> diff --git a/lib/vlan-bitmap.h b/lib/vlan-bitmap.h
> index 092c2ca..fed0ba1 100644
> --- a/lib/vlan-bitmap.h
> +++ b/lib/vlan-bitmap.h
> @@ -28,6 +28,9 @@
>  * This is empirically a useful data structure. */
>
>  unsigned long *vlan_bitmap_from_array(const int64_t *vlans, size_t n_vlans);
> +int vlan_bitmap_from_array__(const int64_t *vlans, size_t n_vlans,
> +                             unsigned long int *b);
> +
>  bool vlan_bitmap_equal(const unsigned long *a, const unsigned long *b);
>
>  /* Returns a new copy of 'vlans'. */
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to