The problem with these types of C tricks is that they only work right if the
platform they're used on has the property of sizeof(void*) == sizeof(int).
Unfortunately this is not always the case and not mandated by the C
standard. That's the reason for these warnings. Its also a reason not to
turn off the warnings.

Mike

> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] Im Auftrag von Dan
> Gesendet: Samstag, 25. Oktober 2008 19:22
> An: General Discussion of SQLite Database
> Betreff: Re: [sqlite] rtree cast warnings on 64bit OS - 
> strange parameter use
> 
> 
> On Oct 25, 2008, at 11:40 PM, William Kyngesburye wrote:
> 
> > I added rtree to my sqlite compilation for the first time and got 
> > these warnings for OSX 64bit:
> >
> > /Users/Shared/src/sqlite/sqlite-3.6.4/sqlite3.c: In function
> > ‘rtreeCreate’:
> > /Users/Shared/src/sqlite/sqlite-3.6.4/sqlite3.c:94784: 
> warning: cast 
> > from pointer to integer of different size
> > /Users/Shared/src/sqlite/sqlite-3.6.4/sqlite3.c: In function
> > ‘rtreeConnect’:
> > /Users/Shared/src/sqlite/sqlite-3.6.4/sqlite3.c:94797: 
> warning: cast 
> > from pointer to integer of different size
> >
> > These are in the rtreeCreate() and rtreeConnect() functions, calling
> > rtreeInit():
> >
> > return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1, (int)pAux);
> >
> > I thought the two pAux parameters were odd - one bare and 
> one cast to 
> > (int), so I looked up rtreeInit().
> 
> Good point. I removed the first of the two "pAux" parameters 
> from rtreeInit(). It was not being used.
> 
>    http://www.sqlite.org/cvstrac/chngview?cn=5842
> 
> > static int rtreeInit(sqlite3 *db, void *pAux, int argc, const char 
> > *const*argv, sqlite3_vtab **ppVtab, char **pzErr, int isCreate, int
> > eCoordType)
> >
> > The first pAux is a pointer, so this one looks correct.  But the 
> > second is an int (eCoordType), and the only two values I 
> found defined 
> > are 0 & 1:
> >
> > #define RTREE_COORD_REAL32 0
> > #define RTREE_COORD_INT32  1
> >
> > Forget the cast warnings now - why is pAux used to set the 
> eCoordType?  
> > My C skills are pretty basic, so maybe there is some pointer/cast 
> > magic happening?  Or maybe it's simply screwed up?
> 
> The two functions that call rtreeInit() are registered as 
> callbacks with SQLite. When you register the callback 
> function you also specify a void* pointer that is passed to 
> the callback whenever it is invoked.
> This is not an uncommon pattern in C code.
> 
> So, since the interface allows us to pass a void* as context 
> to the callback function, but in this instance we really just 
> want an integer, the value has to be cast to a void* when the 
> callback function is registered, and back to an integer when 
> the callback is invoked.
> 
> A lot of compilers throw a warning when they encounter this. 
> In my opinion (having never had anything to do with compiler design or
> implementation) they shouldn't.
> 
> Dan.
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> 

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to