• Kirill Smelkov's avatar
    bitmap: Allow bitmap type to be forward declared · 39b46a02
    Kirill Smelkov authored
    Currently bitmap type is defined via untagged struct which makes it
    impossible to forward declare it. Forward-declaring is useful since all
    bitmap functions only use bitmap* and in public user-visible
    headers/datastructures it is enough to indicate that a data field with
    bitmap pointer is there, whereas bitmap.h can be included only in
    implementation.
    
    Beside that some headers are included by both C and C++ parts of a
    project, and when ccan/bitmap.h is processed by C++ compiler it gives:
    
        ./3rdparty/ccan/ccan/bitmap/bitmap.h: In function ‘bitmap* bitmap_alloc(long unsigned int)’:
        ./3rdparty/ccan/ccan/bitmap/bitmap.h:201:15: error: invalid conversion from ‘void*’ to ‘bitmap*’ [-fpermissive]
          return malloc(bitmap_sizeof(nbits));
                 ~~~~~~^~~~~~~~~~~~~~~~~~~~~~
        ./3rdparty/ccan/ccan/bitmap/bitmap.h: In function ‘bitmap* bitmap_realloc0(bitmap*, long unsigned int, long unsigned int)’:
        ./3rdparty/ccan/ccan/bitmap/bitmap.h:227:18: error: invalid conversion from ‘void*’ to ‘bitmap*’ [-fpermissive]
          bitmap = realloc(bitmap, bitmap_sizeof(nbits));
                   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ./3rdparty/ccan/ccan/bitmap/bitmap.h: In function ‘bitmap* bitmap_realloc1(bitmap*, long unsigned int, long unsigned int)’:
        ./3rdparty/ccan/ccan/bitmap/bitmap.h:238:18: error: invalid conversion from ‘void*’ to ‘bitmap*’ [-fpermissive]
          bitmap = realloc(bitmap, bitmap_sizeof(nbits));
    
    -> Give to users ability not to force-include ccan/bitmap.h by
    forward-declaring bitmaps like this:
    
        typedef struct bitmap bitmap;
        ...
        struct MyStruct {
            bitmap *my_bitmap;
        };
    
    Cc: David Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: Kirill Smelkov's avatarKirill Smelkov <kirr@nexedi.com>
    Message-Id: <20191021150903.25159-1-kirr@nexedi.com>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    39b46a02
bitmap.h 5.77 KB