Luigi Rizzo wrote: > in several places in ipfw2.c i have to move pointers across > structures of variable length (lists of ipfw2 instructions > returned by the getsockopt()), and i use the following type of code: > > void *next; > foo *p; > next = (void *)p + len; > foo = (foo *)p + len; > > When using WARNS=5, the compiler in -current flags them with 'Warning > void * arithmetic'. > > What is the best way to do the above given that i do need to use > these variable-size structures ? I don't understand the second one. The first one blows up because you aren't parenthesizing, e.g.: next = (void *)(p + len); The compiler is complaining because it doesn't know sizeof(*((void *)0)) (pointer arithmatic is coerced to the type of the lvalue, in most cases of casts). Unless you are referencing them as array elements (in which case, packing becomes a problem for you, when referencing them as arrays of foo's, since you don't know how foo's are packed in an array), you should probably cast them to char for the arithmatic, and add them with byte counts. -- TerryReceived on Thu Jul 10 2003 - 01:43:08 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:14 UTC