Currently, a semicolon after a DEFINE_VECTOR_TYPE(...) macro invocation is
not needed, nor does our documentation in "common/utils/vector.h"
prescribe one. Furthermore, it breaks ISO C, which gcc reports with
"-Wpedantic":

> warning: ISO C does not allow extra ‘;’ outside of a function
> [-Wpedantic]

Our current usage is inconsistent; a proper subset of all our
DEFINE_VECTOR_TYPE() invocations is succeeded by a semicolon. We could
remove these semicolons, but that doesn't play nicely with Emacs's C
language parser. Thus, force the semicolon instead.

Signed-off-by: Laszlo Ersek <ler...@redhat.com>
---

Notes:
    v5:
    - force semicolon after DEFINE_VECTOR_TYPE() [Eric]
    - reword commit message accordingly
    
    v4:
    - new patch in v4

 common/utils/vector.h | 7 +++++--
 lib/uri.c             | 2 +-
 copy/file-ops.c       | 2 +-
 copy/nbd-ops.c        | 2 +-
 dump/dump.c           | 2 +-
 fuse/nbdfuse.h        | 2 +-
 info/list.c           | 2 +-
 info/map.c            | 2 +-
 ublk/nbdublk.h        | 2 +-
 ublk/tgt.c            | 2 +-
 10 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/common/utils/vector.h b/common/utils/vector.h
index fb2482c853ff..b9b88ba02e7d 100644
--- a/common/utils/vector.h
+++ b/common/utils/vector.h
@@ -52,7 +52,7 @@
 /* Use of this macro defines a new type called ‘name’ containing an
  * extensible vector of ‘type’ elements.  For example:
  *
- *   DEFINE_VECTOR_TYPE (string_vector, char *)
+ *   DEFINE_VECTOR_TYPE (string_vector, char *);
  *
  * defines a new type called ‘string_vector’ as a vector of ‘char *’.
  * You can create variables of this type:
@@ -176,7 +176,10 @@
   {                                                                     \
     return bsearch (key, v->ptr, v->len, sizeof (type),                 \
                     (void *) compare);                                  \
-  }
+  }                                                                     \
+                                                                        \
+  /* End with duplicate declaration, so callers must supply ';'. */     \
+  struct name
 
 #define empty_vector { .ptr = NULL, .len = 0, .cap = 0 }
 
diff --git a/lib/uri.c b/lib/uri.c
index 367621d40208..31ee90f3b94f 100644
--- a/lib/uri.c
+++ b/lib/uri.c
@@ -58,7 +58,7 @@ struct uri_query {
   char *value;
 };
 
-DEFINE_VECTOR_TYPE (uri_query_list, struct uri_query)
+DEFINE_VECTOR_TYPE (uri_query_list, struct uri_query);
 
 /* Parse the query_raw substring of a URI into a list of decoded queries.
  * Return 0 on success or -1 on error.
diff --git a/copy/file-ops.c b/copy/file-ops.c
index 18cae74a617d..1efece2614e6 100644
--- a/copy/file-ops.c
+++ b/copy/file-ops.c
@@ -64,7 +64,7 @@
 #endif
 
 #ifdef PAGE_CACHE_MAPPING
-DEFINE_VECTOR_TYPE (byte_vector, uint8_t)
+DEFINE_VECTOR_TYPE (byte_vector, uint8_t);
 #endif
 
 static struct rw_ops file_ops;
diff --git a/copy/nbd-ops.c b/copy/nbd-ops.c
index 34ab4857ee00..0980a5edec46 100644
--- a/copy/nbd-ops.c
+++ b/copy/nbd-ops.c
@@ -33,7 +33,7 @@
 
 static struct rw_ops nbd_ops;
 
-DEFINE_VECTOR_TYPE (handles, struct nbd_handle *)
+DEFINE_VECTOR_TYPE (handles, struct nbd_handle *);
 
 struct rw_nbd {
   struct rw rw;
diff --git a/dump/dump.c b/dump/dump.c
index d0da28790eb7..922bd4355897 100644
--- a/dump/dump.c
+++ b/dump/dump.c
@@ -38,7 +38,7 @@
 #include "version.h"
 #include "vector.h"
 
-DEFINE_VECTOR_TYPE (uint32_vector, uint32_t)
+DEFINE_VECTOR_TYPE (uint32_vector, uint32_t);
 
 static const char *progname;
 static struct nbd_handle *nbd;
diff --git a/fuse/nbdfuse.h b/fuse/nbdfuse.h
index 371ca8bb53ac..93b66aac52c1 100644
--- a/fuse/nbdfuse.h
+++ b/fuse/nbdfuse.h
@@ -30,7 +30,7 @@
 
 #include "vector.h"
 
-DEFINE_VECTOR_TYPE (handles, struct nbd_handle *)
+DEFINE_VECTOR_TYPE (handles, struct nbd_handle *);
 
 extern handles nbd;
 extern unsigned connections;
diff --git a/info/list.c b/info/list.c
index c2741ba0fa10..4b4e8f860160 100644
--- a/info/list.c
+++ b/info/list.c
@@ -35,7 +35,7 @@ struct export {
   char *name;
   char *desc;
 };
-DEFINE_VECTOR_TYPE (exports, struct export)
+DEFINE_VECTOR_TYPE (exports, struct export);
 static exports export_list = empty_vector;
 
 static int
diff --git a/info/map.c b/info/map.c
index a5aad9552208..4924866a3b28 100644
--- a/info/map.c
+++ b/info/map.c
@@ -36,7 +36,7 @@
 
 #include "nbdinfo.h"
 
-DEFINE_VECTOR_TYPE (uint32_vector, uint32_t)
+DEFINE_VECTOR_TYPE (uint32_vector, uint32_t);
 
 static void print_extents (uint32_vector *entries);
 static void print_totals (uint32_vector *entries, int64_t size);
diff --git a/ublk/nbdublk.h b/ublk/nbdublk.h
index 086352e9d17f..1296b8424a5b 100644
--- a/ublk/nbdublk.h
+++ b/ublk/nbdublk.h
@@ -25,7 +25,7 @@
 
 #include "vector.h"
 
-DEFINE_VECTOR_TYPE (handles, struct nbd_handle *)
+DEFINE_VECTOR_TYPE (handles, struct nbd_handle *);
 
 #define UBLKSRV_TGT_TYPE_NBD 0
 
diff --git a/ublk/tgt.c b/ublk/tgt.c
index 5d88e33dcc4b..9b0a64d66b80 100644
--- a/ublk/tgt.c
+++ b/ublk/tgt.c
@@ -62,7 +62,7 @@ struct thread_info {
   struct ublksrv_aio_ctx *aio_ctx;
   struct ublksrv_aio_list compl;
 };
-DEFINE_VECTOR_TYPE (thread_infos, struct thread_info)
+DEFINE_VECTOR_TYPE (thread_infos, struct thread_info);
 static thread_infos thread_info;
 
 static pthread_barrier_t barrier;

_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to