]>
git.saurik.com Git - wxWidgets.git/blob - src/tiff/port/strtoul.c
   4  * Copyright (c) 1990, 1993 
   5  *      The Regents of the University of California.  All rights reserved. 
   7  * Redistribution and use in source and binary forms, with or without 
   8  * modification, are permitted provided that the following conditions 
  10  * 1. Redistributions of source code must retain the above copyright 
  11  *    notice, this list of conditions and the following disclaimer. 
  12  * 2. Redistributions in binary form must reproduce the above copyright 
  13  *    notice, this list of conditions and the following disclaimer in the 
  14  *    documentation and/or other materials provided with the distribution. 
  15  * 3. Neither the name of the University nor the names of its contributors 
  16  *    may be used to endorse or promote products derived from this software 
  17  *    without specific prior written permission. 
  19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  33 static char sccsid
[] = "@(#)strtoul.c   8.1 (Berkeley) 6/4/93"; 
  34 __RCSID("$NetBSD: strtoul.c,v 1.16 2003/08/07 16:43:45 agc Exp $"); 
  43  * Convert a string to an unsigned long integer. 
  45  * Ignores `locale' stuff.  Assumes that the upper and lower case 
  46  * alphabets and digits are each contiguous. 
  49 strtoul(const char *nptr
, char **endptr
, int base
) 
  52         unsigned long acc
, cutoff
; 
  57          * See strtol for comments as to the logic used. 
  61                 c 
= (unsigned char) *s
++; 
  71         if ((base 
== 0 || base 
== 16) && 
  72             c 
== '0' && (*s 
== 'x' || *s 
== 'X')) { 
  78                 base 
= c 
== '0' ? 8 : 10; 
  80         cutoff 
= ULONG_MAX 
/ (unsigned long)base
; 
  81         cutlim 
= (int)(ULONG_MAX 
% (unsigned long)base
); 
  82         for (acc 
= 0, any 
= 0;; c 
= (unsigned char) *s
++) { 
  86                         c 
-= isupper(c
) ? 'A' - 10 : 'a' - 10; 
  93                 if (acc 
> cutoff 
|| (acc 
== cutoff 
&& c 
> cutlim
)) { 
  99                         acc 
*= (unsigned long)base
; 
 106                 /* LINTED interface specification */ 
 107                 *endptr 
= (char *)(any 
? s 
- 1 : nptr
);