1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

fix decimal2longlong too

mysql-test/r/rpl_start_stop_slave.result:
  results updated
This commit is contained in:
unknown
2004-11-27 13:54:51 +01:00
parent 87347253ce
commit df1f7cab70
2 changed files with 9 additions and 6 deletions

View File

@ -532,7 +532,7 @@ int decimal2longlong(decimal *from, longlong *to)
{
dec1 *buf=from->buf;
longlong x=0;
int intg;
int intg, frac;
for (intg=from->intg; intg > 0; intg-=DIG_PER_DEC1)
{
@ -540,11 +540,11 @@ int decimal2longlong(decimal *from, longlong *to)
/*
Attention: trick!
we're calculating -|from| instead of |from| here
because |MIN_LONGLONG| > MAX_LONGLONG
because |LONGLONG_MIN| > LONGLONG_MAX
so we can convert -9223372036854775808 correctly
*/
x=x*DIG_BASE - *buf++;
if (unlikely(x > y))
if (unlikely(y < (LONGLONG_MAX/DIG_BASE) || x > y))
{
*to= from->sign ? y : -y;
return E_DEC_OVERFLOW;
@ -558,7 +558,10 @@ int decimal2longlong(decimal *from, longlong *to)
}
*to=from->sign ? x : -x;
return from->frac ? E_DEC_TRUNCATED : E_DEC_OK;
for (frac=from->frac; unlikely(frac > 0); frac-=DIG_PER_DEC1)
if (*buf++)
return E_DEC_TRUNCATED;
return E_DEC_OK;
}
/*