On Wed, Aug 19, 2009 at 9:36 AM, Cedric BAIL<cedric.b...@free.fr> wrote: > On Wed, Aug 19, 2009 at 12:23 PM, Vincent Torri<vto...@univ-evry.fr> wrote: >> On Wed, 19 Aug 2009, Cedric BAIL wrote: >>> On Wed, Aug 19, 2009 at 12:04 PM, Vincent Torri<vto...@univ-evry.fr> >>> wrote: >>>> On Wed, 19 Aug 2009, Cedric BAIL wrote: >>>>> On Wed, Aug 19, 2009 at 10:40 AM, Vincent Torri<vto...@univ-evry.fr> >>>>> wrote: >>>>>> On Wed, 19 Aug 2009, Vincent Torri wrote: >>>>>>> >>>>>>> Hey, >>>>>>> >>>>>>> in eina_fixed_bitmap.c, lines 68, 88 and 160, offsets are computed and >>>>>>> stored in an int. But, if I'm not mistaken, on 64 bits arch, offsets >>>>>>> are >>>>>>> 64 bits long. >>>>>>> >>>>>>> Shouldn't we store them in long instead of int ? >>>>>> >>>>>> and technically speaking, we should cast to char * (it seems that, for >>>>>> gcc, sizeof(void) == 1) >>>>> >>>>> And sizeof(void*) ? :-) >>>> >>>> if you have : >>>> >>>> type *a = ... >>>> type *b = ... >>>> >>>> a - b is equal to (the address of a - the address of b) / sizeof (type) >>>> >>>> and not >>>> >>>> (the address of a - the address of b) / sizeof (type *) >>> >>> Does your compile handle void* arithmetic or not ? I guess your are >>> porting to some kind of strange compiler that don't support pointer >>> arithmetic with void* ? I am right ? >> >> it supports of course pointer arithmetic, but i think that you don't >> understand the problem, or you didn't read carefully what i just wrote >> above. >> >> You MUST know the size of 'type'. gcc is stating that void is a type of size >> 1, it's a gcc feature that is specific to it. suncc does not state that >> (size of void is undefined in the standard). > > It's not gcc specific other decent compiler support this feature. But > apparently not suncc, so you can patch if needed.
if i understand correctly, suncc does handle void* arithmetic, as one unit ("byte") and, similar to cast to char* and as I far as I tested it's the same thing in GCC as well, try the following code: #include <stdio.h> int main(void) { struct x { char a[4], b[4]; } x = {"abc", "123"}; struct y { int a[4], b[4]; } y = {{1, 2, 3, 4}, {10, 20, 30, 40}}; printf("x: char b - a: %2ld ( 4)\n", (char *)x.b - (char *)x.a); printf("x: void b - a: %2ld ( ?)\n", (void *)x.b - (void *)x.a); printf("y: char b - a: %2ld (16)\n", (char *)y.b - (char *)y.a); printf("y: void b - a: %2ld ( ?)\n", (void *)y.b - (void *)y.a); printf("y: int b - a: %2ld ( 4)\n", y.b - y.a); return 0; } here all char and void report the same, first "?" is 4, second is 16. -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -------------------------------------- MSN: barbi...@gmail.com Skype: gsbarbieri Mobile: +55 (19) 9225-2202 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel