On Wed, 19 May 2010 08:24:09 +0200 Atton Jonathan <jonathan.at...@gmail.com>
said:

it is indeed a shortcut. i could use printf with %p instead - but i was just
avoidng adding a full struct/object there that would normally be the case when
querying values from it. is imply used the pointer itself as a quick shortcut
to keep the code small and focused. in any normal situation it'd be a void * to
your original data struct that you'd probe/fetch values from etc.

> This is a shortcut, it avoid to use a struct to store the int. Sometimes for
> an example it is better to have less code, this way you only see the
> interesting part. But of course this is not a good example for newbies.
> 
> 2010/5/19 Brett Nash <n...@nash.id.au>
> 
> > On Tue, 18 May 2010 22:01:57 +0200
> > Andreas Volz <li...@brachttal.net> wrote:
> >
> > > Hello,
> > >
> > > I noticed a problem in the Elementary GenList example code:
> > >
> > > static Elm_Genlist_Item_Class itc1;
> > > char *gl_label_get(const void *data, Evas_Object *obj, const char
> > > *part) {
> > >    char buf[256];
> > >    snprintf(buf, sizeof(buf), "Item # %i", (int)data);
> > >    return strdup(buf);
> > > }
> > >
> > > static void
> > > gl_sel(void *data, Evas_Object *obj, void *event_info)
> > > {
> > >    printf("sel item data [%p] on genlist obj [%p], item pointer
> > > [%p]\n", data, obj, event_info);
> > >    printf ("data val: %i\n", (int) data);
> > > }
> > >
> > > void
> > > test_genlist(void *data, Evas_Object *obj, void *event_info
> > > {
> > >    int i;
> > >    ...
> > >
> > >    for (i = 0; i < 2000; i++)
> > >      {
> > >         gli = elm_genlist_item_append(gl, &itc1,
> > >                                       (void *)i/* item data */,
> > >                                       NULL/* parent */,
> > >                                       ELM_GENLIST_ITEM_NONE,
> > >                                       gl_sel/* func */,
> > >                                       (void *)(i * 10)/* func data
> > > */); ...
> > > }
> > >
> > > While wrapping GenList to C++ I noticed that something really bad
> > > happens here. The value of 'i' and 'i*10' is casted into a pointer
> > > type and later casted back to int. I'm really sure this code isn't
> > > covered by the C standard and not portable in any way. This code
> > > needs the int type to have the same size as a pointer type. But there
> > > may be architectures/compilers where this isn't the case. And even if
> > > this works here it may bring someone to the idea to do the same with
> > > other integral types where this won't work for sure. Not a smart idea
> > > in a public example...
> > >
> > > If you think this is correct code and I'm wrong please enlighten
> > > me. :-)
> >
> > It's technically not correct.  Yes it hits something undefined in there.
> > Practically however it's only a problem if sizeof(int) > sizeof(ptr) or
> > some weird platform which doesn't support odd pointers or something
> > (cray I's?).  Don't think efl runs on any of those platforms ;-)
> >
> > Pratically it's fine.  A slight improvement may be to cast it to an
> > intptr_t which will protect it against different size void/int's  (And
> > will reduce warnings too).
> >
> > > If not I'll change the example to hold two int arrays in the correct
> > > scope and work with pointer type data.
> >
> > Or do that ;-)
> >
> >
> > ------------------------------------------------------------------------------
> >
> > _______________________________________________
> > enlightenment-devel mailing list
> > enlightenment-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
> 
> 
> 
> -- 
> Regards.
> ------------------------------------------------------------------------------
> 
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------

_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to