Fix of incorrect casting for large sizes

This commit is contained in:
Magne Mahre 2009-11-11 19:54:57 +01:00
parent 272b9ad5de
commit cc87cb9fbf

View file

@ -311,18 +311,17 @@ typedef struct st_mysql_lex_string LEX_STRING;
static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
{
const uchar *start= ptr;
const uchar *end= ptr + len;
if (len > 20)
{
const uchar *end_words= (const uchar *)
(((intptr)end) / SIZEOF_INT * SIZEOF_INT);
const uchar *start_words= (const uchar *)
((((intptr)start) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT);
const uchar *end_words= (const uchar *)(intptr)
(((ulonglong)(intptr)end) / SIZEOF_INT * SIZEOF_INT);
const uchar *start_words= (const uchar *)(intptr)
((((ulonglong)(intptr)ptr) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT);
DBUG_ASSERT(((intptr)start) >= SIZEOF_INT);
if (end_words > start)
DBUG_ASSERT(((ulonglong)(intptr)ptr) >= SIZEOF_INT);
if (end_words > ptr)
{
while (end > end_words && end[-1] == 0x20)
end--;
@ -331,7 +330,7 @@ static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
end -= SIZEOF_INT;
}
}
while (end > start && end[-1] == 0x20)
while (end > ptr && end[-1] == 0x20)
end--;
return (end);
}