Message ID | 20210831163545.3646157-1-pab@pabigot.com |
---|---|
State | New |
Headers | show |
Series | [BlueZ] lib: fix variable-length array declarations in hci structures | expand |
Hi Marcel, On Tue, Aug 31, 2021 at 2:54 PM Peter A. Bigot <pab@pabigot.com> wrote: > > On 8/31/21 2:23 PM, Marcel Holtmann wrote: > > Hi Peter, > > > >> Use of zero as the size for arrays as the last element of a structure > >> is a GNU C extension, which as of GCC 10 produces diagnostics when > >> values in the extended array are referenced. Switch to the C99 > >> standard idiom for flexible array members, already in use in a few > >> other headers. > >> > >> Signed-off-by: Peter A. Bigot <pab@pabigot.com> > >> --- > >> > >> No changes from previous submission except the BlueZ subject prefix > >> that I hope will get this into bluez. > >> > >> lib/hci.h | 16 ++++++++-------- > >> 1 file changed, 8 insertions(+), 8 deletions(-) > >> > >> diff --git a/lib/hci.h b/lib/hci.h > >> index 3382b87bf..a61568bce 100644 > >> --- a/lib/hci.h > >> +++ b/lib/hci.h > >> @@ -729,7 +729,7 @@ typedef struct { > >> typedef struct { > >> uint8_t flt_type; > >> uint8_t cond_type; > >> - uint8_t condition[0]; > >> + uint8_t condition[]; > >> } __attribute__ ((packed)) set_event_flt_cp; > >> #define SET_EVENT_FLT_CP_SIZE 2 > > does this break any API assumptions? Since as long as libbluetooth exists these headers are API. > > The size of the structure remains the same; there should be no API > changes. I've done this sort of change multiple times over the years > and nobody's reported any problems. > > Peter Looks like we also use [] in the kernel so I think it should be safe to do this change on userspace as well. -- Luiz Augusto von Dentz
diff --git a/lib/hci.h b/lib/hci.h index 3382b87bf..a61568bce 100644 --- a/lib/hci.h +++ b/lib/hci.h @@ -729,7 +729,7 @@ typedef struct { typedef struct { uint8_t flt_type; uint8_t cond_type; - uint8_t condition[0]; + uint8_t condition[]; } __attribute__ ((packed)) set_event_flt_cp; #define SET_EVENT_FLT_CP_SIZE 2 @@ -2135,7 +2135,7 @@ typedef struct { #define EVT_LE_META_EVENT 0x3E typedef struct { uint8_t subevent; - uint8_t data[0]; + uint8_t data[]; } __attribute__ ((packed)) evt_le_meta_event; #define EVT_LE_META_EVENT_SIZE 1 @@ -2159,7 +2159,7 @@ typedef struct { uint8_t bdaddr_type; bdaddr_t bdaddr; uint8_t length; - uint8_t data[0]; + uint8_t data[]; } __attribute__ ((packed)) le_advertising_info; #define LE_ADVERTISING_INFO_SIZE 9 @@ -2246,7 +2246,7 @@ typedef struct { typedef struct { uint16_t total_num_blocks; uint8_t num_handles; - cmplt_handle handles[0]; + cmplt_handle handles[]; } __attribute__ ((packed)) evt_num_completed_blocks; #define EVT_AMP_STATUS_CHANGE 0x4D @@ -2264,7 +2264,7 @@ typedef struct { #define EVT_STACK_INTERNAL 0xFD typedef struct { uint16_t type; - uint8_t data[0]; + uint8_t data[]; } __attribute__ ((packed)) evt_stack_internal; #define EVT_STACK_INTERNAL_SIZE 2 @@ -2407,19 +2407,19 @@ struct hci_dev_req { struct hci_dev_list_req { uint16_t dev_num; - struct hci_dev_req dev_req[0]; /* hci_dev_req structures */ + struct hci_dev_req dev_req[]; /* hci_dev_req structures */ }; struct hci_conn_list_req { uint16_t dev_id; uint16_t conn_num; - struct hci_conn_info conn_info[0]; + struct hci_conn_info conn_info[]; }; struct hci_conn_info_req { bdaddr_t bdaddr; uint8_t type; - struct hci_conn_info conn_info[0]; + struct hci_conn_info conn_info[]; }; struct hci_auth_info_req {
Use of zero as the size for arrays as the last element of a structure is a GNU C extension, which as of GCC 10 produces diagnostics when values in the extended array are referenced. Switch to the C99 standard idiom for flexible array members, already in use in a few other headers. Signed-off-by: Peter A. Bigot <pab@pabigot.com> --- No changes from previous submission except the BlueZ subject prefix that I hope will get this into bluez. lib/hci.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)