On Sunday 14 October 2007, Adrian Bunk wrote: > drivers/net/wireless/rt2x00/rt2x00ring.h contains the following: > > <-- snip --> > > ... > /* > * data_desc > * Each data entry also contains a descriptor which is used by the > * device to determine what should be done with the packet and > * what the current status is. > * This structure is greatly simplified, but the descriptors > * are basically a list of little endian 32 bit values. > * Make the array by default 1 word big, this will allow us > * to use sizeof() correctly. > */ > struct data_desc { > __le32 word[1]; > }; > ... > /* > * TX/RX Descriptor access functions. > */ > static inline void rt2x00_desc_read(struct data_desc *desc, > const u8 word, u32 *value) > { > *value = le32_to_cpu(desc->word[word]); > } > > static inline void rt2x00_desc_write(struct data_desc *desc, > const u8 word, const u32 value) > { > desc->word[word] = cpu_to_le32(value); > } > ... > > <-- snip --> > > I haven't checked whether it might work in all cases, but passing > non-zero values as second parameter to rt2x00_desc_{read,write}() > (as is done in many cases) is even in the best case bad coding style. Access to the array is correct, even with non-zero values the code that is reading/writing to the array knows the exact size of the descriptor. Within rt2x00 are however 5 drivers who have different descriptor sizes. That means I can't create a structure which has the correct array length. The structure itself is just a simple map over preallocated memory (skb->data in case of USB or dma in case of PCI). So possible solutions would be: - remove struct data_desc and make it a void* or __le32* This is at the cost of code readibility since the above pointers have less meaning then a pointer to a structure which can be nicely documented. - increase the word[] array to something that fits all (+/- 20 entries) This wouldn't really be a problem, all it requires is fixing the sizeof() statements. But then the code should contain a big note about that it is not allowed to read/write _all_ words in the entry since it depends on the driver that uses it. What would in this case be the best solution for good coding style? Ivo - To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html