~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mystrings/strto.c

  • Committer: Monty Taylor
  • Date: 2008-08-09 02:24:34 UTC
  • mto: (266.1.8 codestyle)
  • mto: This revision was merged to the branch mainline in revision 279.
  • Revision ID: monty@inaugust.com-20080809022434-97na8pnugghskxip
Removed mystringslt conv lib and replaced it with a noinst lib.

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
#undef strtoul
50
50
#undef strtol
51
51
#ifdef USE_LONGLONG
 
52
#define UTYPE_MAX (~(uint64_t) 0)
52
53
#define TYPE_MIN LONGLONG_MIN
53
54
#define TYPE_MAX LONGLONG_MAX
54
55
#define longtype int64_t
59
60
#define function longtype strtoll
60
61
#endif
61
62
#else
 
63
#define UTYPE_MAX (ulong) ~0L
62
64
#define TYPE_MIN LONG_MIN
63
65
#define TYPE_MAX LONG_MAX
64
66
#define longtype long
86
88
  register unsigned int cutlim;
87
89
  register ulongtype i;
88
90
  register const char *s;
89
 
  register unsigned char c;
 
91
  register uchar c;
90
92
  const char *save;
91
93
  int overflow;
92
94
 
96
98
  s = nptr;
97
99
 
98
100
  /* Skip white space.  */
99
 
  while (my_isspace(&my_charset_utf8_general_ci, *s))
 
101
  while (my_isspace(&my_charset_latin1, *s))
100
102
    ++s;
101
103
  if (*s == '\0')
102
104
  {
116
118
  }
117
119
    
118
120
 
119
 
  if (base == 16 && s[0] == '0' && my_toupper (&my_charset_utf8_general_ci, s[1]) == 'X')
 
121
  if (base == 16 && s[0] == '0' && my_toupper (&my_charset_latin1, s[1]) == 'X')
120
122
    s += 2;
121
123
 
122
124
  /* If BASE is zero, figure it out ourselves.  */
124
126
  {
125
127
    if (*s == '0')
126
128
    {
127
 
      if (my_toupper (&my_charset_utf8_general_ci, s[1]) == 'X')
 
129
      if (my_toupper (&my_charset_latin1, s[1]) == 'X')
128
130
      {
129
131
        s += 2;
130
132
        base = 16;
139
141
  /* Save the pointer so we can check later if anything happened.  */
140
142
  save = s;
141
143
 
142
 
  cutoff = UINT64_MAX / (unsigned long int) base;
143
 
  cutlim = (uint) (UINT64_MAX % (unsigned long int) base);
 
144
  cutoff = UTYPE_MAX / (unsigned long int) base;
 
145
  cutlim = (uint) (UTYPE_MAX % (unsigned long int) base);
144
146
 
145
147
  overflow = 0;
146
148
  i = 0;
147
149
  for (c = *s; c != '\0'; c = *++s)
148
150
  {
149
 
    if (my_isdigit (&my_charset_utf8_general_ci, c))
 
151
    if (my_isdigit (&my_charset_latin1, c))
150
152
      c -= '0';
151
 
    else if (my_isalpha (&my_charset_utf8_general_ci, c))
152
 
      c = my_toupper (&my_charset_utf8_general_ci, c) - 'A' + 10;
 
153
    else if (my_isalpha (&my_charset_latin1, c))
 
154
      c = my_toupper (&my_charset_latin1, c) - 'A' + 10;
153
155
    else
154
156
      break;
155
157
    if (c >= base)
189
191
  {
190
192
    my_errno=ERANGE;
191
193
#ifdef USE_UNSIGNED
192
 
    return UINT64_MAX;
 
194
    return UTYPE_MAX;
193
195
#else
194
196
    return negative ? TYPE_MIN : TYPE_MAX;
195
197
#endif