Tejun Heo writes:
 > Harvey Harrison wrote:
 > >>> I know it's ugly, but I had it done anyways.  The one real problem I have
 > >>> with it is that if link and ap->pmp_link ever get changed to different 
 > >>> types
 > >>> the compiler will not even warn as we cast away to (char *).  To make it
 > >>> a bit more robust, a BUILD_BUG_ON checking the pointer types may be a
 > >>> good idea.
 > >> Sorry, but Nacked-by: Tejun Heo <[EMAIL PROTECTED]>
 > >>
 > > 
 > > Can't say I really blame you, other than this one error, drivers/ata
 > > builds almost sparse-clean, and I had it done anyways.  I wonder if
 > > a helper similar in spirit would be any better.  This doesn't have
 > > any typechecking, but perhaps that could be dealt with too.
 > > 
 > > Ran into a similar problem with mmzone.h, akpm has the patch, but
 > > maybe a helper (kernel.h?) would be cleaner.  Or maybe it's just
 > > better to live with the sparse warnings....
 > > 
 > > /*
 > >  * return the offset of the ptr from the base, in bytes.
 > >  */
 > > #define PTR_OFF(base, ptr) \
 > > ((char *)ptr - (char *)base)
 > > 
 > > if (PTR_OFF(ap->pmp_link, ++link) < ap->nr_pmp_links * sizeof(*link))
 > >    return link;
 > 
 > Can you please explain why it warns against pointer substraction?  Is it
 > because it can generate division?

Pointer subtraction as commonly implemented implies a signed
integer division, because it may need to convert a negative
byte pointer difference to a negative array index difference.
Seasoned C programmers avoid it like the plague...
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to