From 8d96cc47381a840e5e03384e8077ad238fd1adc4 Mon Sep 17 00:00:00 2001 From: Lee Duncan Date: Wed, 3 Jun 2020 08:29:39 -0700 Subject: Fix issue with zero-length arrays at end of struct MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A common practice in C coding, over the years, has been to add a zero-length array at the end of the structure when trying to represent a possibly-empty array of bytes that may be appended to the struct. But the gcc-10 compiler does not like such structures, taking the zero-length literally. The following errors are fixed by this commit: > iscsiadm.c: In function ‘session_stats’: > iscsiadm.c:939:56: error: array subscript ‘() + -1’ is outside the bounds of an interior zero-length array ‘struct iscsi_stats_custom[0]’ [-Werror=zero-length-bounds] > 939 | (unsigned long long)rsp.u.getstats.stats.custom[i].value); > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ > In file included from initiator.h:29, > from iscsiadm.c:36: > ../include/iscsi_if.h:844:28: note: while referencing ‘custom’ > 844 | struct iscsi_stats_custom custom[0] > | ^~~~~~ > iscsiadm.c:938:56: error: array subscript ‘() + -1’ is outside the bounds of an interior zero-length array ‘struct iscsi_stats_custom[0]’ [-Werror=zero-length-bounds] > 938 | printf("\t%s: %llu\n", rsp.u.getstats.stats.custom[i].desc, > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~ > In file included from initiator.h:29, > from iscsiadm.c:36: > ../include/iscsi_if.h:844:28: note: while referencing ‘custom’ > 844 | struct iscsi_stats_custom custom[0] > | ^~~~~~ > cc1: all warnings being treated as errors The work around is to convert the two "custom[0]" structure members to use "custom[]". --- include/iscsi_if.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/iscsi_if.h b/include/iscsi_if.h index 2d46214..5a1c614 100644 --- a/include/iscsi_if.h +++ b/include/iscsi_if.h @@ -841,7 +841,7 @@ struct iscsi_stats { * up to ISCSI_STATS_CUSTOM_MAX */ uint32_t custom_length; - struct iscsi_stats_custom custom[0] + struct iscsi_stats_custom custom[] __attribute__ ((aligned (sizeof(uint64_t)))); }; @@ -972,7 +972,7 @@ struct iscsi_offload_host_stats { * up to ISCSI_HOST_STATS_CUSTOM_MAX */ uint32_t custom_length; - struct iscsi_host_stats_custom custom[0] + struct iscsi_host_stats_custom custom[] __attribute__ ((aligned (sizeof(uint64_t)))); }; -- cgit v1.2.1