~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mystrings/decimal.c

Giant merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
99
99
      implementation-defined.
100
100
*/
101
101
 
102
 
#include <my_global.h>
 
102
#include <alloca.h>
 
103
#include <m_string.h>
103
104
#include <m_ctype.h>
104
 
#include <myisampack.h>
105
 
#include <my_sys.h> /* for my_alloca */
106
 
#include <m_string.h>
107
 
#include <decimal.h>
 
105
#include <storage/myisam/myisampack.h>
 
106
#include <mystrings/decimal.h>
108
107
 
109
108
/*
110
109
  Internally decimal numbers are stored base 10^9 (see DIG_BASE below)
1312
1311
  int bin_size= decimal_bin_size(precision, scale);
1313
1312
 
1314
1313
  sanity(to);
1315
 
  d_copy= (uchar*) my_alloca(bin_size);
 
1314
  d_copy= (uchar*) alloca(bin_size);
1316
1315
  memcpy(d_copy, from, bin_size);
1317
1316
  d_copy[0]^= 0x80;
1318
1317
  from= d_copy;
1395
1394
      goto err;
1396
1395
    buf++;
1397
1396
  }
1398
 
  my_afree(d_copy);
1399
1397
  return error;
1400
1398
 
1401
1399
err:
1402
 
  my_afree(d_copy);
1403
1400
  decimal_make_zero(((decimal_t*) to));
1404
1401
  return(E_DEC_BAD_NUM);
1405
1402
}
2009
2006
  stop1=buf1-intg1;
2010
2007
  stop2=buf2-intg2;
2011
2008
 
2012
 
  bzero(to->buf, (intg0+frac0)*sizeof(dec1));
 
2009
  memset(to->buf, 0, (intg0+frac0)*sizeof(dec1));
2013
2010
 
2014
2011
  for (buf1+=frac1-1; buf1 >= stop1; buf1--, start0--)
2015
2012
  {
2174
2171
 
2175
2172
  len1=(i=ROUND_UP(prec1))+ROUND_UP(2*frac2+scale_incr+1) + 1;
2176
2173
  set_if_bigger(len1, 3);
2177
 
  if (!(tmp1=(dec1 *)my_alloca(len1*sizeof(dec1))))
 
2174
  if (!(tmp1=(dec1 *)alloca(len1*sizeof(dec1))))
2178
2175
    return E_DEC_OOM;
2179
2176
  memcpy(tmp1, buf1, i*sizeof(dec1));
2180
 
  bzero(tmp1+i, (len1-i)*sizeof(dec1));
 
2177
  memset(tmp1+i, 0, (len1-i)*sizeof(dec1));
2181
2178
 
2182
2179
  start1=tmp1;
2183
2180
  stop1=start1+len1;
2321
2318
        *buf0++=*start1++;
2322
2319
  }
2323
2320
done:
2324
 
  my_afree(tmp1);
2325
2321
  return error;
2326
2322
}
2327
2323