Commit 5979afa2 authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Greg Kroah-Hartman

staging: Replace zero-length array with flexible-array member

The current codebase makes use of the zero-length array language
extension to the C90 standard, but the preferred mechanism to declare
variable-length types such as these ones is a flexible array member[1][2],
introduced in C99:

struct foo {
        int stuff;
        struct boo array[];
};

By making use of the mechanism above, we will get a compiler warning
in case the flexible array does not occur last in the structure, which
will help us prevent some kind of undefined behavior bugs from being
inadvertently introduced[3] to the codebase from now on.

Also, notice that, dynamic memory allocations won't be affected by
this change:

"Flexible array members have incomplete type, and so the sizeof operator
may not be applied. As a quirk of the original implementation of
zero-length arrays, sizeof evaluates to zero."[1]

This issue was found with the help of Coccinelle.

[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
[2] https://github.com/KSPP/linux/issues/21
[3] commit 76497732 ("cxgb3/l2t: Fix undefined behaviour")
Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
Link: https://lore.kernel.org/r/20200220132908.GA30501@embeddedorSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cf7e44da
...@@ -29,7 +29,7 @@ struct mux_pkt_header { ...@@ -29,7 +29,7 @@ struct mux_pkt_header {
__le32 seq_num; __le32 seq_num;
__le32 payload_size; __le32 payload_size;
__le16 packet_type; __le16 packet_type;
unsigned char data[0]; unsigned char data[];
}; };
struct mux_tx { struct mux_tx {
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
struct hci_packet { struct hci_packet {
__dev16 cmd_evt; __dev16 cmd_evt;
__dev16 len; __dev16 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct tlv { struct tlv {
...@@ -51,7 +51,7 @@ struct sdu { ...@@ -51,7 +51,7 @@ struct sdu {
__dev32 dft_eps_ID; __dev32 dft_eps_ID;
__dev32 bearer_ID; __dev32 bearer_ID;
__dev32 nic_type; __dev32 nic_type;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct multi_sdu { struct multi_sdu {
...@@ -59,7 +59,7 @@ struct multi_sdu { ...@@ -59,7 +59,7 @@ struct multi_sdu {
__dev16 len; __dev16 len;
__dev16 num_packet; __dev16 num_packet;
__dev16 reserved; __dev16 reserved;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct hci_pdn_table_ind { struct hci_pdn_table_ind {
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
struct audio_apbridgea_hdr { struct audio_apbridgea_hdr {
__u8 type; __u8 type;
__le16 i2s_port; __le16 i2s_port;
__u8 data[0]; __u8 data[];
} __packed; } __packed;
struct audio_apbridgea_set_config_request { struct audio_apbridgea_set_config_request {
......
...@@ -70,7 +70,7 @@ struct hostif_data_request { ...@@ -70,7 +70,7 @@ struct hostif_data_request {
#define TYPE_DATA 0x0000 #define TYPE_DATA 0x0000
#define TYPE_AUTH 0x0001 #define TYPE_AUTH 0x0001
__le16 reserved; __le16 reserved;
u8 data[0]; u8 data[];
} __packed; } __packed;
#define TYPE_PMK1 0x0001 #define TYPE_PMK1 0x0001
...@@ -194,7 +194,7 @@ enum mib_data_type { ...@@ -194,7 +194,7 @@ enum mib_data_type {
struct hostif_mib_value { struct hostif_mib_value {
__le16 size; __le16 size;
__le16 type; __le16 type;
u8 body[0]; u8 body[];
} __packed; } __packed;
struct hostif_mib_get_confirm_t { struct hostif_mib_get_confirm_t {
......
...@@ -434,7 +434,7 @@ struct mcu_msg_push_buffers_internal_buffer { ...@@ -434,7 +434,7 @@ struct mcu_msg_push_buffers_internal_buffer {
struct mcu_msg_push_buffers_internal { struct mcu_msg_push_buffers_internal {
struct mcu_msg_header header; struct mcu_msg_header header;
u32 channel_id; u32 channel_id;
struct mcu_msg_push_buffers_internal_buffer buffer[0]; struct mcu_msg_push_buffers_internal_buffer buffer[];
} __attribute__ ((__packed__)); } __attribute__ ((__packed__));
struct mcu_msg_put_stream_buffer { struct mcu_msg_put_stream_buffer {
......
...@@ -406,7 +406,7 @@ struct octeon_hcd { ...@@ -406,7 +406,7 @@ struct octeon_hcd {
*/ */
struct octeon_temp_buffer { struct octeon_temp_buffer {
void *orig_buffer; void *orig_buffer;
u8 data[0]; u8 data[];
}; };
static inline struct usb_hcd *octeon_to_hcd(struct octeon_hcd *p) static inline struct usb_hcd *octeon_to_hcd(struct octeon_hcd *p)
......
...@@ -728,14 +728,14 @@ struct rtllib_pspoll_hdr { ...@@ -728,14 +728,14 @@ struct rtllib_pspoll_hdr {
struct rtllib_hdr { struct rtllib_hdr {
__le16 frame_ctl; __le16 frame_ctl;
__le16 duration_id; __le16 duration_id;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_1addr { struct rtllib_hdr_1addr {
__le16 frame_ctl; __le16 frame_ctl;
__le16 duration_id; __le16 duration_id;
u8 addr1[ETH_ALEN]; u8 addr1[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_2addr { struct rtllib_hdr_2addr {
...@@ -743,7 +743,7 @@ struct rtllib_hdr_2addr { ...@@ -743,7 +743,7 @@ struct rtllib_hdr_2addr {
__le16 duration_id; __le16 duration_id;
u8 addr1[ETH_ALEN]; u8 addr1[ETH_ALEN];
u8 addr2[ETH_ALEN]; u8 addr2[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_3addr { struct rtllib_hdr_3addr {
...@@ -753,7 +753,7 @@ struct rtllib_hdr_3addr { ...@@ -753,7 +753,7 @@ struct rtllib_hdr_3addr {
u8 addr2[ETH_ALEN]; u8 addr2[ETH_ALEN];
u8 addr3[ETH_ALEN]; u8 addr3[ETH_ALEN];
__le16 seq_ctl; __le16 seq_ctl;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_4addr { struct rtllib_hdr_4addr {
...@@ -764,7 +764,7 @@ struct rtllib_hdr_4addr { ...@@ -764,7 +764,7 @@ struct rtllib_hdr_4addr {
u8 addr3[ETH_ALEN]; u8 addr3[ETH_ALEN];
__le16 seq_ctl; __le16 seq_ctl;
u8 addr4[ETH_ALEN]; u8 addr4[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_3addrqos { struct rtllib_hdr_3addrqos {
...@@ -775,7 +775,7 @@ struct rtllib_hdr_3addrqos { ...@@ -775,7 +775,7 @@ struct rtllib_hdr_3addrqos {
u8 addr3[ETH_ALEN]; u8 addr3[ETH_ALEN];
__le16 seq_ctl; __le16 seq_ctl;
__le16 qos_ctl; __le16 qos_ctl;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_hdr_4addrqos { struct rtllib_hdr_4addrqos {
...@@ -787,13 +787,13 @@ struct rtllib_hdr_4addrqos { ...@@ -787,13 +787,13 @@ struct rtllib_hdr_4addrqos {
__le16 seq_ctl; __le16 seq_ctl;
u8 addr4[ETH_ALEN]; u8 addr4[ETH_ALEN];
__le16 qos_ctl; __le16 qos_ctl;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtllib_info_element { struct rtllib_info_element {
u8 id; u8 id;
u8 len; u8 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct rtllib_authentication { struct rtllib_authentication {
...@@ -802,7 +802,7 @@ struct rtllib_authentication { ...@@ -802,7 +802,7 @@ struct rtllib_authentication {
__le16 transaction; __le16 transaction;
__le16 status; __le16 status;
/*challenge*/ /*challenge*/
struct rtllib_info_element info_element[0]; struct rtllib_info_element info_element[];
} __packed; } __packed;
struct rtllib_disauth { struct rtllib_disauth {
...@@ -818,7 +818,7 @@ struct rtllib_disassoc { ...@@ -818,7 +818,7 @@ struct rtllib_disassoc {
struct rtllib_probe_request { struct rtllib_probe_request {
struct rtllib_hdr_3addr header; struct rtllib_hdr_3addr header;
/* SSID, supported rates */ /* SSID, supported rates */
struct rtllib_info_element info_element[0]; struct rtllib_info_element info_element[];
} __packed; } __packed;
struct rtllib_probe_response { struct rtllib_probe_response {
...@@ -829,7 +829,7 @@ struct rtllib_probe_response { ...@@ -829,7 +829,7 @@ struct rtllib_probe_response {
/* SSID, supported rates, FH params, DS params, /* SSID, supported rates, FH params, DS params,
* CF params, IBSS params, TIM (if beacon), RSN * CF params, IBSS params, TIM (if beacon), RSN
*/ */
struct rtllib_info_element info_element[0]; struct rtllib_info_element info_element[];
} __packed; } __packed;
/* Alias beacon for probe_response */ /* Alias beacon for probe_response */
...@@ -840,7 +840,7 @@ struct rtllib_assoc_request_frame { ...@@ -840,7 +840,7 @@ struct rtllib_assoc_request_frame {
__le16 capability; __le16 capability;
__le16 listen_interval; __le16 listen_interval;
/* SSID, supported rates, RSN */ /* SSID, supported rates, RSN */
struct rtllib_info_element info_element[0]; struct rtllib_info_element info_element[];
} __packed; } __packed;
struct rtllib_assoc_response_frame { struct rtllib_assoc_response_frame {
...@@ -848,7 +848,7 @@ struct rtllib_assoc_response_frame { ...@@ -848,7 +848,7 @@ struct rtllib_assoc_response_frame {
__le16 capability; __le16 capability;
__le16 status; __le16 status;
__le16 aid; __le16 aid;
struct rtllib_info_element info_element[0]; /* supported rates */ struct rtllib_info_element info_element[]; /* supported rates */
} __packed; } __packed;
struct rtllib_txb { struct rtllib_txb {
...@@ -859,7 +859,7 @@ struct rtllib_txb { ...@@ -859,7 +859,7 @@ struct rtllib_txb {
u16 reserved; u16 reserved;
__le16 frag_size; __le16 frag_size;
__le16 payload_size; __le16 payload_size;
struct sk_buff *fragments[0]; struct sk_buff *fragments[];
}; };
#define MAX_SUBFRAME_COUNT 64 #define MAX_SUBFRAME_COUNT 64
...@@ -1792,7 +1792,7 @@ struct rtllib_device { ...@@ -1792,7 +1792,7 @@ struct rtllib_device {
/* This must be the last item so that it points to the data /* This must be the last item so that it points to the data
* allocated beyond this structure by alloc_rtllib * allocated beyond this structure by alloc_rtllib
*/ */
u8 priv[0]; u8 priv[];
}; };
#define IEEE_A (1<<0) #define IEEE_A (1<<0)
......
...@@ -886,14 +886,14 @@ enum ieee80211_mfie { ...@@ -886,14 +886,14 @@ enum ieee80211_mfie {
struct rtl_80211_hdr { struct rtl_80211_hdr {
__le16 frame_ctl; __le16 frame_ctl;
__le16 duration_id; __le16 duration_id;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtl_80211_hdr_1addr { struct rtl_80211_hdr_1addr {
__le16 frame_ctl; __le16 frame_ctl;
__le16 duration_id; __le16 duration_id;
u8 addr1[ETH_ALEN]; u8 addr1[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtl_80211_hdr_2addr { struct rtl_80211_hdr_2addr {
...@@ -901,7 +901,7 @@ struct rtl_80211_hdr_2addr { ...@@ -901,7 +901,7 @@ struct rtl_80211_hdr_2addr {
__le16 duration_id; __le16 duration_id;
u8 addr1[ETH_ALEN]; u8 addr1[ETH_ALEN];
u8 addr2[ETH_ALEN]; u8 addr2[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtl_80211_hdr_3addr { struct rtl_80211_hdr_3addr {
...@@ -911,7 +911,7 @@ struct rtl_80211_hdr_3addr { ...@@ -911,7 +911,7 @@ struct rtl_80211_hdr_3addr {
u8 addr2[ETH_ALEN]; u8 addr2[ETH_ALEN];
u8 addr3[ETH_ALEN]; u8 addr3[ETH_ALEN];
__le16 seq_ctl; __le16 seq_ctl;
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtl_80211_hdr_4addr { struct rtl_80211_hdr_4addr {
...@@ -922,7 +922,7 @@ struct rtl_80211_hdr_4addr { ...@@ -922,7 +922,7 @@ struct rtl_80211_hdr_4addr {
u8 addr3[ETH_ALEN]; u8 addr3[ETH_ALEN];
__le16 seq_ctl; __le16 seq_ctl;
u8 addr4[ETH_ALEN]; u8 addr4[ETH_ALEN];
u8 payload[0]; u8 payload[];
} __packed; } __packed;
struct rtl_80211_hdr_3addrqos { struct rtl_80211_hdr_3addrqos {
...@@ -951,7 +951,7 @@ struct rtl_80211_hdr_4addrqos { ...@@ -951,7 +951,7 @@ struct rtl_80211_hdr_4addrqos {
struct ieee80211_info_element { struct ieee80211_info_element {
u8 id; u8 id;
u8 len; u8 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct ieee80211_authentication { struct ieee80211_authentication {
...@@ -960,7 +960,7 @@ struct ieee80211_authentication { ...@@ -960,7 +960,7 @@ struct ieee80211_authentication {
__le16 transaction; __le16 transaction;
__le16 status; __le16 status;
/*challenge*/ /*challenge*/
struct ieee80211_info_element info_element[0]; struct ieee80211_info_element info_element[];
} __packed; } __packed;
struct ieee80211_disassoc { struct ieee80211_disassoc {
...@@ -971,7 +971,7 @@ struct ieee80211_disassoc { ...@@ -971,7 +971,7 @@ struct ieee80211_disassoc {
struct ieee80211_probe_request { struct ieee80211_probe_request {
struct rtl_80211_hdr_3addr header; struct rtl_80211_hdr_3addr header;
/* SSID, supported rates */ /* SSID, supported rates */
struct ieee80211_info_element info_element[0]; struct ieee80211_info_element info_element[];
} __packed; } __packed;
struct ieee80211_probe_response { struct ieee80211_probe_response {
...@@ -982,7 +982,7 @@ struct ieee80211_probe_response { ...@@ -982,7 +982,7 @@ struct ieee80211_probe_response {
/* SSID, supported rates, FH params, DS params, /* SSID, supported rates, FH params, DS params,
* CF params, IBSS params, TIM (if beacon), RSN * CF params, IBSS params, TIM (if beacon), RSN
*/ */
struct ieee80211_info_element info_element[0]; struct ieee80211_info_element info_element[];
} __packed; } __packed;
/* Alias beacon for probe_response */ /* Alias beacon for probe_response */
...@@ -993,7 +993,7 @@ struct ieee80211_assoc_request_frame { ...@@ -993,7 +993,7 @@ struct ieee80211_assoc_request_frame {
__le16 capability; __le16 capability;
__le16 listen_interval; __le16 listen_interval;
/* SSID, supported rates, RSN */ /* SSID, supported rates, RSN */
struct ieee80211_info_element info_element[0]; struct ieee80211_info_element info_element[];
} __packed; } __packed;
struct ieee80211_reassoc_request_frame { struct ieee80211_reassoc_request_frame {
...@@ -1002,7 +1002,7 @@ struct ieee80211_reassoc_request_frame { ...@@ -1002,7 +1002,7 @@ struct ieee80211_reassoc_request_frame {
__le16 listen_interval; __le16 listen_interval;
u8 current_ap[ETH_ALEN]; u8 current_ap[ETH_ALEN];
/* SSID, supported rates, RSN */ /* SSID, supported rates, RSN */
struct ieee80211_info_element info_element[0]; struct ieee80211_info_element info_element[];
} __packed; } __packed;
struct ieee80211_assoc_response_frame { struct ieee80211_assoc_response_frame {
...@@ -1010,7 +1010,7 @@ struct ieee80211_assoc_response_frame { ...@@ -1010,7 +1010,7 @@ struct ieee80211_assoc_response_frame {
__le16 capability; __le16 capability;
__le16 status; __le16 status;
__le16 aid; __le16 aid;
struct ieee80211_info_element info_element[0]; /* supported rates */ struct ieee80211_info_element info_element[]; /* supported rates */
} __packed; } __packed;
struct ieee80211_txb { struct ieee80211_txb {
...@@ -1021,7 +1021,7 @@ struct ieee80211_txb { ...@@ -1021,7 +1021,7 @@ struct ieee80211_txb {
u16 reserved; u16 reserved;
__le16 frag_size; __le16 frag_size;
__le16 payload_size; __le16 payload_size;
struct sk_buff *fragments[0]; struct sk_buff *fragments[];
}; };
#define MAX_TX_AGG_COUNT 16 #define MAX_TX_AGG_COUNT 16
...@@ -2007,7 +2007,7 @@ struct ieee80211_device { ...@@ -2007,7 +2007,7 @@ struct ieee80211_device {
/* This must be the last item so that it points to the data /* This must be the last item so that it points to the data
* allocated beyond this structure by alloc_ieee80211 * allocated beyond this structure by alloc_ieee80211
*/ */
u8 priv[0]; u8 priv[];
}; };
#define IEEE_A (1<<0) #define IEEE_A (1<<0)
......
...@@ -535,7 +535,7 @@ struct ieee80211_info_element_hdr { ...@@ -535,7 +535,7 @@ struct ieee80211_info_element_hdr {
struct ieee80211_info_element { struct ieee80211_info_element {
u8 id; u8 id;
u8 len; u8 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
/* /*
...@@ -597,7 +597,7 @@ struct ieee80211_txb { ...@@ -597,7 +597,7 @@ struct ieee80211_txb {
u16 reserved; u16 reserved;
u16 frag_size; u16 frag_size;
u16 payload_size; u16 payload_size;
struct sk_buff *fragments[0]; struct sk_buff *fragments[];
}; };
/* SWEEP TABLE ENTRIES NUMBER*/ /* SWEEP TABLE ENTRIES NUMBER*/
......
...@@ -48,7 +48,7 @@ struct eeprom_rw_param { ...@@ -48,7 +48,7 @@ struct eeprom_rw_param {
struct EFUSE_ACCESS_STRUCT { struct EFUSE_ACCESS_STRUCT {
u16 start_addr; u16 start_addr;
u16 cnts; u16 cnts;
u8 data[0]; u8 data[];
}; };
struct burst_rw_reg { struct burst_rw_reg {
...@@ -324,7 +324,7 @@ struct mp_ioctl_handler { ...@@ -324,7 +324,7 @@ struct mp_ioctl_handler {
struct mp_ioctl_param { struct mp_ioctl_param {
unsigned int subcode; unsigned int subcode;
unsigned int len; unsigned int len;
unsigned char data[0]; unsigned char data[];
}; };
#define GEN_MP_IOCTL_SUBCODE(code) _MP_IOCTL_ ## code ## _CMD_ #define GEN_MP_IOCTL_SUBCODE(code) _MP_IOCTL_ ## code ## _CMD_
......
...@@ -62,7 +62,7 @@ struct wilc_p2p_pub_act_frame { ...@@ -62,7 +62,7 @@ struct wilc_p2p_pub_act_frame {
u8 oui_type; u8 oui_type;
u8 oui_subtype; u8 oui_subtype;
u8 dialog_token; u8 dialog_token;
u8 elem[0]; u8 elem[];
} __packed; } __packed;
struct wilc_vendor_specific_ie { struct wilc_vendor_specific_ie {
...@@ -70,13 +70,13 @@ struct wilc_vendor_specific_ie { ...@@ -70,13 +70,13 @@ struct wilc_vendor_specific_ie {
u8 tag_len; u8 tag_len;
u8 oui[3]; u8 oui[3];
u8 oui_type; u8 oui_type;
u8 attr[0]; u8 attr[];
} __packed; } __packed;
struct wilc_attr_entry { struct wilc_attr_entry {
u8 attr_type; u8 attr_type;
__le16 attr_len; __le16 attr_len;
u8 val[0]; u8 val[];
} __packed; } __packed;
struct wilc_attr_oper_ch { struct wilc_attr_oper_ch {
...@@ -91,13 +91,13 @@ struct wilc_attr_ch_list { ...@@ -91,13 +91,13 @@ struct wilc_attr_ch_list {
u8 attr_type; u8 attr_type;
__le16 attr_len; __le16 attr_len;
u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
u8 elem[0]; u8 elem[];
} __packed; } __packed;
struct wilc_ch_list_elem { struct wilc_ch_list_elem {
u8 op_class; u8 op_class;
u8 no_of_channels; u8 no_of_channels;
u8 ch_list[0]; u8 ch_list[];
} __packed; } __packed;
static void cfg_scan_result(enum scan_event scan_event, static void cfg_scan_result(enum scan_event scan_event,
......
...@@ -139,7 +139,7 @@ struct wilc_spi_read_rsp_data { ...@@ -139,7 +139,7 @@ struct wilc_spi_read_rsp_data {
u8 status; u8 status;
u8 resp_header; u8 resp_header;
u8 resp_data[4]; u8 resp_data[4];
u8 crc[0]; u8 crc[];
} __packed; } __packed;
struct wilc_spi_rsp_data { struct wilc_spi_rsp_data {
......
...@@ -355,7 +355,7 @@ ...@@ -355,7 +355,7 @@
/* Commonly used basic types */ /* Commonly used basic types */
struct hfa384x_bytestr { struct hfa384x_bytestr {
__le16 len; __le16 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
struct hfa384x_bytestr32 { struct hfa384x_bytestr32 {
...@@ -421,7 +421,7 @@ struct hfa384x_authenticate_station_data { ...@@ -421,7 +421,7 @@ struct hfa384x_authenticate_station_data {
/*-- Configuration Record: WPAData (data portion only) --*/ /*-- Configuration Record: WPAData (data portion only) --*/
struct hfa384x_wpa_data { struct hfa384x_wpa_data {
__le16 datalen; __le16 datalen;
u8 data[0]; /* max 80 */ u8 data[]; /* max 80 */
} __packed; } __packed;
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
......
...@@ -204,7 +204,7 @@ struct p80211pstr { ...@@ -204,7 +204,7 @@ struct p80211pstr {
struct p80211pstrd { struct p80211pstrd {
u8 len; u8 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
/* Maximum pascal string */ /* Maximum pascal string */
...@@ -249,7 +249,7 @@ struct p80211itemd { ...@@ -249,7 +249,7 @@ struct p80211itemd {
u32 did; u32 did;
u16 status; u16 status;
u16 len; u16 len;
u8 data[0]; u8 data[];
} __packed; } __packed;
/* message data item for int, BOUNDEDINT, ENUMINT */ /* message data item for int, BOUNDEDINT, ENUMINT */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment