~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mystrings/my_strtoll10.c

  • Committer: Patrick Galbraith
  • Date: 2008-08-22 20:19:13 UTC
  • mfrom: (365.1.2 drizzle)
  • Revision ID: patg@radha.local-20080822201913-njjzdfrlihco6ap1
Merge with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#include <m_string.h>
17
17
#include <errno.h>
18
18
 
19
 
#undef  ULONGLONG_MAX
20
 
#define ULONGLONG_MAX           (~(uint64_t) 0)
21
19
#define MAX_NEGATIVE_NUMBER     ((uint64_t) 0x8000000000000000LL)
22
20
#define INIT_CNT  9
23
21
#define LFACTOR   1000000000ULL
62
60
    0           ok
63
61
    ERANGE      If the the value of the converted number exceeded the
64
62
                maximum negative/unsigned long long integer.
65
 
                In this case the return value is ~0 if value was
66
 
                positive and LONGLONG_MIN if value was negative.
 
63
                In this case the return value is UINT64_MAX if value was
 
64
                positive and UINT64_MIN if value was negative.
67
65
    EDOM        If the string didn't contain any digits. In this case
68
66
                the return value is 0.
69
67
 
123
121
      if (++s == end)
124
122
        goto no_conv;
125
123
    }
126
 
    cutoff=  ULONGLONG_MAX / LFACTOR2;
127
 
    cutoff2= ULONGLONG_MAX % LFACTOR2 / 100;
128
 
    cutoff3=  ULONGLONG_MAX % 100;
 
124
    cutoff=  UINT64_MAX / LFACTOR2;
 
125
    cutoff2= UINT64_MAX % LFACTOR2 / 100;
 
126
    cutoff3=  UINT64_MAX % 100;
129
127
  }
130
128
 
131
129
  /* Handle case where we have a lot of pre-zero */
202
200
 
203
201
overflow:                                       /* *endptr is set here */
204
202
  *error= ERANGE;
205
 
  return negative ? INT64_MIN: (int64_t) ULONGLONG_MAX;
 
203
  return negative ? INT64_MIN: INT64_MAX;
206
204
 
207
205
end_i:
208
206
  *endptr= (char*) s;